mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Move from facts render to facts validation.
This allows fact information to be validated in the underlying source files, but requires us to explicitly maintain this in appropriate version-tagged, and architecture-tagged files. This is more explicit and safer. This mechanism uses a special regular expression for matching a +checkconst stanza to validate constant values, sizes and offsets. This applies to both Go source files and assembly files. PiperOrigin-RevId: 511867507
This commit is contained in:
committed by
gVisor bot
parent
5817f4cc64
commit
bd561fd3f9
@@ -88,14 +88,7 @@ global:
|
||||
- pkg/shim/runtimeoptions/v14/runtimeoptions_cri.go
|
||||
analyzers:
|
||||
asmdecl:
|
||||
generated:
|
||||
suppress:
|
||||
# Non-conventional functions.
|
||||
- "\\[amd64\\].*sysret: RET without writing to 8-byte"
|
||||
- "\\[amd64\\].*iret: RET without writing to 8-byte"
|
||||
- "\\[amd64\\].*exception: use of .* points beyond argument frame"
|
||||
- "\\[arm64\\].*HaltEl1ExceptionAndResume: unknown variable"
|
||||
- "\\[arm64\\].*HaltEl1ExceptionAndResume: use of .* points beyond argument frame"
|
||||
generated: # Enabled.
|
||||
external:
|
||||
exclude: [".*"] # Disabled.
|
||||
internal:
|
||||
@@ -109,6 +102,12 @@ analyzers:
|
||||
- "wrmsr: invalid offset value"
|
||||
- "rdmsr: invalid MOVL of ret"
|
||||
- "rdmsr: invalid offset ret"
|
||||
# Non-conventional functions.
|
||||
- "\\[amd64\\].*sysret: RET without writing to 8-byte"
|
||||
- "\\[amd64\\].*iret: RET without writing to 8-byte"
|
||||
- "\\[amd64\\].*exception: use of .* points beyond argument frame"
|
||||
- "\\[arm64\\].*HaltEl1ExceptionAndResume: unknown variable"
|
||||
- "\\[arm64\\].*HaltEl1ExceptionAndResume: use of .* points beyond argument frame"
|
||||
assign:
|
||||
external:
|
||||
exclude:
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
load("//tools:arch.bzl", "arch_genrule")
|
||||
load("//tools:defs.bzl", "go_library", "go_test")
|
||||
load("//tools/nogo:defs.bzl", "nogo_facts")
|
||||
|
||||
# Package linux contains the constants and types needed to interface with a
|
||||
# Linux kernel. It should be used instead of syscall or golang.org/x/sys/unix
|
||||
@@ -8,19 +6,6 @@ load("//tools/nogo:defs.bzl", "nogo_facts")
|
||||
|
||||
package(licenses = ["notice"])
|
||||
|
||||
nogo_facts(
|
||||
name = "iouring_offsets",
|
||||
srcs = ["iouring.go"],
|
||||
output = "iouring_offsets_impl.go",
|
||||
template = "iouring_offsets.tmpl",
|
||||
)
|
||||
|
||||
arch_genrule(
|
||||
name = "iouring_offsets_arch",
|
||||
src = ":iouring_offsets",
|
||||
template = "iouring_offsets_%s.go",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "linux",
|
||||
srcs = [
|
||||
@@ -91,7 +76,6 @@ go_library(
|
||||
"utsname.go",
|
||||
"wait.go",
|
||||
"xattr.go",
|
||||
":iouring_offsets_arch",
|
||||
],
|
||||
marshal = True,
|
||||
visibility = ["//visibility:public"],
|
||||
|
||||
@@ -192,3 +192,47 @@ type IOUringSqe struct {
|
||||
addr3 uint64
|
||||
_ uint64
|
||||
}
|
||||
|
||||
const (
|
||||
_IOSqRingOffset = 0 // +checkoffset . IORings.Sq
|
||||
_IOSqRingOffsetHead = 0 // +checkoffset . IOUring.Head
|
||||
_IOSqRingOffsetTail = 64 // +checkoffset . IOUring.Tail
|
||||
_IOSqRingOffsetMask = 256 // +checkoffset . IORings.SqRingMask
|
||||
_IOSqRingOffsetEntries = 264 // +checkoffset . IORings.SqRingEntries
|
||||
_IOSqRingOffsetFlags = 276 // +checkoffset . IORings.sqFlags
|
||||
_IOSqRingOffsetDropped = 272 // +checkoffset . IORings.sqDropped
|
||||
)
|
||||
|
||||
// PreComputedIOSqRingOffsets returns precomputed values for IOSqRingOffsets.
|
||||
func PreComputedIOSqRingOffsets() IOSqRingOffsets {
|
||||
return IOSqRingOffsets{
|
||||
Head: _IOSqRingOffset + _IOSqRingOffsetHead,
|
||||
Tail: _IOSqRingOffset + _IOSqRingOffsetTail,
|
||||
RingMask: _IOSqRingOffsetMask,
|
||||
RingEntries: _IOSqRingOffsetEntries,
|
||||
Flags: _IOSqRingOffsetFlags,
|
||||
Dropped: _IOSqRingOffsetDropped,
|
||||
}
|
||||
}
|
||||
|
||||
const (
|
||||
_IOCqRingOffset = 128 // +checkoffset . IORings.Cq
|
||||
_IOCqRingOffsetHead = 0 // +checkoffset . IOUring.Head
|
||||
_IOCqRingOffsetTail = 64 // +checkoffset . IOUring.Tail
|
||||
_IOCqRingOffsetMask = 260 // +checkoffset . IORings.CqRingMask
|
||||
_IOCqRingOffsetEntries = 268 // +checkoffset . IORings.CqRingEntries
|
||||
_IOCqRingOffsetFlags = 280 // +checkoffset . IORings.cqFlags
|
||||
_IOCqRingOffsetOverflow = 284 // +checkoffset . IORings.CqOverflow
|
||||
)
|
||||
|
||||
// PreComputedIOCqRingOffsets returns precomputed values for IOCqRingOffsets.
|
||||
func PreComputedIOCqRingOffsets() IOCqRingOffsets {
|
||||
return IOCqRingOffsets{
|
||||
Head: _IOCqRingOffset + _IOCqRingOffsetHead,
|
||||
Tail: _IOCqRingOffset + _IOCqRingOffsetTail,
|
||||
RingMask: _IOCqRingOffsetMask,
|
||||
RingEntries: _IOCqRingOffsetEntries,
|
||||
Overflow: _IOCqRingOffsetOverflow,
|
||||
Flags: _IOCqRingOffsetFlags,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
// Copyright 2022 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.
|
||||
|
||||
package linux
|
||||
|
||||
// PreComputedIOSqRingOffsets returns precomputed values for IOSqRingOffsets.
|
||||
func PreComputedIOSqRingOffsets() IOSqRingOffsets {
|
||||
return IOSqRingOffsets{
|
||||
Head: {{ .IORings.Sq.Offset }} + {{ .IOUring.Head.Offset }},
|
||||
Tail: {{ .IORings.Sq.Offset }} + {{ .IOUring.Tail.Offset }},
|
||||
RingMask: {{ .IORings.SqRingMask.Offset }},
|
||||
RingEntries: {{ .IORings.SqRingEntries.Offset }},
|
||||
Flags: {{ .IORings.sqFlags.Offset }},
|
||||
Dropped: {{ .IORings.sqDropped.Offset }},
|
||||
}
|
||||
}
|
||||
|
||||
// PreComputedIOCqRingOffsets returns precomputed values for IOCqRingOffsets.
|
||||
func PreComputedIOCqRingOffsets() IOCqRingOffsets {
|
||||
return IOCqRingOffsets {
|
||||
Head: {{ .IORings.Cq.Offset }} + {{ .IOUring.Head.Offset }},
|
||||
Tail: {{ .IORings.Cq.Offset }} + {{ .IOUring.Tail.Offset }},
|
||||
RingMask: {{ .IORings.CqRingMask.Offset }},
|
||||
RingEntries: {{ .IORings.CqRingEntries.Offset }},
|
||||
Overflow: {{ .IORings.CqOverflow.Offset }},
|
||||
Flags: {{ .IORings.cqFlags.Offset }},
|
||||
}
|
||||
}
|
||||
+2
-19
@@ -1,30 +1,13 @@
|
||||
load("//tools:arch.bzl", "arch_genrule", "select_arch")
|
||||
load("//tools:defs.bzl", "go_library", "go_test")
|
||||
load("//tools/nogo:defs.bzl", "nogo_facts")
|
||||
|
||||
package(licenses = ["notice"])
|
||||
|
||||
nogo_facts(
|
||||
name = "goid_impl",
|
||||
srcs = ["goid.go"],
|
||||
output = "goid_impl.s",
|
||||
template = select_arch(
|
||||
amd64 = "goid_amd64.s",
|
||||
arm64 = "goid_arm64.s",
|
||||
),
|
||||
)
|
||||
|
||||
arch_genrule(
|
||||
name = "goid_impl_arch",
|
||||
src = ":goid_impl",
|
||||
template = "goid_impl_%s.s",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "goid",
|
||||
srcs = [
|
||||
"goid.go",
|
||||
":goid_impl_arch",
|
||||
"goid_amd64.s",
|
||||
"goid_arm64.s",
|
||||
],
|
||||
stateify = False,
|
||||
visibility = ["//visibility:public"],
|
||||
|
||||
+1
-4
@@ -16,12 +16,9 @@
|
||||
package goid
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
_ "runtime" // For facts in assembly files.
|
||||
)
|
||||
|
||||
// Dummy references for facts.
|
||||
const _ = runtime.Compiler
|
||||
|
||||
// goid returns the current goid, it is defined in assembly.
|
||||
func goid() int64
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
#define GOID_OFFSET {{ .import.runtime.g.goid.Offset }}
|
||||
#define GOID_OFFSET 152 // +checkoffset runtime g.goid
|
||||
|
||||
// func goid() int64
|
||||
TEXT ·goid(SB),NOSPLIT,$0-8
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
#define GOID_OFFSET {{ .import.runtime.g.goid.Offset }}
|
||||
#define GOID_OFFSET 152 // +checkoffset runtime g.goid
|
||||
|
||||
// func goid() int64
|
||||
TEXT ·goid(SB),NOSPLIT,$0-8
|
||||
|
||||
+2
-19
@@ -1,30 +1,13 @@
|
||||
load("//tools:arch.bzl", "arch_genrule", "select_arch")
|
||||
load("//tools:defs.bzl", "go_library", "go_test")
|
||||
load("//tools/nogo:defs.bzl", "nogo_facts")
|
||||
|
||||
package(licenses = ["notice"])
|
||||
|
||||
nogo_facts(
|
||||
name = "hosttid_impl",
|
||||
srcs = ["hosttid.go"],
|
||||
output = "hosttid_impl.s",
|
||||
template = select_arch(
|
||||
amd64 = "hosttid_amd64.s",
|
||||
arm64 = "hosttid_arm64.s",
|
||||
),
|
||||
)
|
||||
|
||||
arch_genrule(
|
||||
name = "hosttid_impl_arch",
|
||||
src = ":hosttid_impl",
|
||||
template = "hosttid_impl_%s.s",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "hosttid",
|
||||
srcs = [
|
||||
"hosttid.go",
|
||||
":hosttid_impl_arch",
|
||||
"hosttid_amd64.s",
|
||||
"hosttid_arm64.s",
|
||||
],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
#define M_OFFSET {{ .import.runtime.g.m.Offset }}
|
||||
#define PROCID_OFFSET {{ .import.runtime.m.procid.Offset }}
|
||||
#define M_OFFSET 48 // +checkoffset runtime g.m
|
||||
#define PROCID_OFFSET 72 // +checkoffset runtime m.procid
|
||||
|
||||
TEXT ·Current(SB),NOSPLIT,$0-8
|
||||
// procid is in getg().m.procid.
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
#define M_OFFSET {{ .import.runtime.g.m.Offset }}
|
||||
#define PROCID_OFFSET {{ .import.runtime.m.procid.Offset }}
|
||||
#define M_OFFSET 48 // +checkoffset runtime g.m
|
||||
#define PROCID_OFFSET 72 // +checkoffset runtime m.procid
|
||||
|
||||
TEXT ·Current(SB),NOSPLIT,$0-8
|
||||
// procid is in getg().m.procid.
|
||||
|
||||
+3
-36
@@ -1,42 +1,7 @@
|
||||
load("//tools:arch.bzl", "arch_genrule", "select_arch")
|
||||
load("//tools:defs.bzl", "go_library")
|
||||
load("//tools/nogo:defs.bzl", "nogo_facts")
|
||||
|
||||
package(licenses = ["notice"])
|
||||
|
||||
exports_files(glob(["*.go"]))
|
||||
|
||||
nogo_facts(
|
||||
name = "entry_impl",
|
||||
srcs = [
|
||||
"aarch64.go",
|
||||
"defs.go",
|
||||
"defs_amd64.go",
|
||||
"defs_arm64.go",
|
||||
"entry_template.go",
|
||||
"x86.go",
|
||||
],
|
||||
output = "entry_impl.s",
|
||||
template = select_arch(
|
||||
amd64 = "entry_amd64.s",
|
||||
arm64 = "entry_arm64.s",
|
||||
),
|
||||
deps = [
|
||||
"//pkg/abi/linux",
|
||||
"//pkg/cpuid",
|
||||
"//pkg/hostarch",
|
||||
"//pkg/ring0/pagetables",
|
||||
"//pkg/sentry/arch",
|
||||
"//pkg/sentry/arch/fpu",
|
||||
],
|
||||
)
|
||||
|
||||
arch_genrule(
|
||||
name = "entry_impl_arch",
|
||||
src = ":entry_impl",
|
||||
template = "entry_impl_%s.s",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "ring0",
|
||||
srcs = [
|
||||
@@ -45,7 +10,9 @@ go_library(
|
||||
"defs_amd64.go",
|
||||
"defs_arm64.go",
|
||||
"entry_amd64.go",
|
||||
"entry_amd64.s",
|
||||
"entry_arm64.go",
|
||||
"entry_arm64.s",
|
||||
"kernel.go",
|
||||
"kernel_amd64.go",
|
||||
"kernel_arm64.go",
|
||||
@@ -56,10 +23,10 @@ go_library(
|
||||
"lib_arm64.s",
|
||||
"ring0.go",
|
||||
"x86.go",
|
||||
":entry_impl_arch",
|
||||
],
|
||||
visibility = ["//pkg/sentry:internal"],
|
||||
deps = [
|
||||
"//pkg/abi/linux",
|
||||
"//pkg/cpuid",
|
||||
"//pkg/hostarch",
|
||||
"//pkg/ring0/pagetables",
|
||||
|
||||
+63
-66
@@ -16,78 +16,75 @@
|
||||
#include "textflag.h"
|
||||
|
||||
// CPU offsets.
|
||||
#define CPU_REGISTERS {{ .CPU.registers.Offset }}
|
||||
#define CPU_FPU_STATE {{ .CPU.floatingPointState.Offset }}
|
||||
#define CPU_ERROR_CODE ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.errorCode.Offset }})
|
||||
#define CPU_ERROR_TYPE ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.errorType.Offset }})
|
||||
#define CPU_VECTOR ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.vector.Offset }})
|
||||
#define CPU_FAULT_ADDR ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.faultAddr.Offset }})
|
||||
#define CPU_ENTRY ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.kernelEntry.Offset }})
|
||||
#define CPU_HAS_XSAVE ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.hasXSAVE.Offset }})
|
||||
#define CPU_HAS_XSAVEOPT ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.hasXSAVEOPT.Offset }})
|
||||
#define CPU_REGISTERS 64 // +checkoffset . CPU.registers
|
||||
#define CPU_FPU_STATE 280 // +checkoffset . CPU.floatingPointState
|
||||
#define CPU_ARCH_STATE 16 // +checkoffset . CPU.CPUArchState
|
||||
#define CPU_ERROR_CODE CPU_ARCH_STATE+0 // +checkoffset . CPUArchState.errorCode
|
||||
#define CPU_ERROR_TYPE CPU_ARCH_STATE+8 // +checkoffset . CPUArchState.errorType
|
||||
#define CPU_VECTOR CPU_ARCH_STATE+16 // +checkoffset . CPUArchState.vector
|
||||
#define CPU_FAULT_ADDR CPU_ARCH_STATE+24 // +checkoffset . CPUArchState.faultAddr
|
||||
#define CPU_ENTRY CPU_ARCH_STATE+32 // +checkoffset . CPUArchState.kernelEntry
|
||||
#define CPU_HAS_XSAVE CPU_ARCH_STATE+40 // +checkoffset . CPUArchState.hasXSAVE
|
||||
#define CPU_HAS_XSAVEOPT CPU_ARCH_STATE+41 // +checkoffset . CPUArchState.hasXSAVEOPT
|
||||
|
||||
{{ with .kernelEntry }}
|
||||
#define ENTRY_SCRATCH0 {{ .scratch0.Offset }}
|
||||
#define ENTRY_STACK_TOP {{ .stackTop.Offset }}
|
||||
#define ENTRY_CPU_SELF {{ .cpuSelf.Offset }}
|
||||
#define ENTRY_KERNEL_CR3 {{ .kernelCR3.Offset }}
|
||||
{{ end }}
|
||||
#define ENTRY_SCRATCH0 256 // +checkoffset . kernelEntry.scratch0
|
||||
#define ENTRY_STACK_TOP 264 // +checkoffset . kernelEntry.stackTop
|
||||
#define ENTRY_CPU_SELF 272 // +checkoffset . kernelEntry.cpuSelf
|
||||
#define ENTRY_KERNEL_CR3 280 // +checkoffset . kernelEntry.kernelCR3
|
||||
|
||||
// Bits.
|
||||
#define _RFLAGS_IF {{ .Constants._RFLAGS_IF }}
|
||||
#define _RFLAGS_IOPL0 {{ .Constants._RFLAGS_IOPL0 }}
|
||||
#define _KERNEL_FLAGS {{ .Constants.KernelFlagsSet }}
|
||||
#define _RFLAGS_IF 512 // +checkconst . _RFLAGS_IF
|
||||
#define _RFLAGS_IOPL0 4096 // +checkconst . _RFLAGS_IOPL0
|
||||
#define _KERNEL_FLAGS 2 // +checkconst . KernelFlagsSet
|
||||
|
||||
// Vectors.
|
||||
#define DivideByZero {{ .Constants.DivideByZero }}
|
||||
#define Debug {{ .Constants.Debug }}
|
||||
#define NMI {{ .Constants.NMI }}
|
||||
#define Breakpoint {{ .Constants.Breakpoint }}
|
||||
#define Overflow {{ .Constants.Overflow }}
|
||||
#define BoundRangeExceeded {{ .Constants.BoundRangeExceeded }}
|
||||
#define InvalidOpcode {{ .Constants.InvalidOpcode }}
|
||||
#define DeviceNotAvailable {{ .Constants.DeviceNotAvailable }}
|
||||
#define DoubleFault {{ .Constants.DoubleFault }}
|
||||
#define CoprocessorSegmentOverrun {{ .Constants.CoprocessorSegmentOverrun }}
|
||||
#define InvalidTSS {{ .Constants.InvalidTSS }}
|
||||
#define SegmentNotPresent {{ .Constants.SegmentNotPresent }}
|
||||
#define StackSegmentFault {{ .Constants.StackSegmentFault }}
|
||||
#define GeneralProtectionFault {{ .Constants.GeneralProtectionFault }}
|
||||
#define PageFault {{ .Constants.PageFault }}
|
||||
#define X87FloatingPointException {{ .Constants.X87FloatingPointException }}
|
||||
#define AlignmentCheck {{ .Constants.AlignmentCheck }}
|
||||
#define MachineCheck {{ .Constants.MachineCheck }}
|
||||
#define SIMDFloatingPointException {{ .Constants.SIMDFloatingPointException }}
|
||||
#define VirtualizationException {{ .Constants.VirtualizationException }}
|
||||
#define SecurityException {{ .Constants.SecurityException }}
|
||||
#define SyscallInt80 {{ .Constants.SyscallInt80 }}
|
||||
#define Syscall {{ .Constants.Syscall }}
|
||||
#define DivideByZero 0 // +checkconst . DivideByZero
|
||||
#define Debug 1 // +checkconst . Debug
|
||||
#define NMI 2 // +checkconst . NMI
|
||||
#define Breakpoint 3 // +checkconst . Breakpoint
|
||||
#define Overflow 4 // +checkconst . Overflow
|
||||
#define BoundRangeExceeded 5 // +checkconst . BoundRangeExceeded
|
||||
#define InvalidOpcode 6 // +checkconst . InvalidOpcode
|
||||
#define DeviceNotAvailable 7 // +checkconst . DeviceNotAvailable
|
||||
#define DoubleFault 8 // +checkconst . DoubleFault
|
||||
#define CoprocessorSegmentOverrun 9 // +checkconst . CoprocessorSegmentOverrun
|
||||
#define InvalidTSS 10 // +checkconst . InvalidTSS
|
||||
#define SegmentNotPresent 11 // +checkconst . SegmentNotPresent
|
||||
#define StackSegmentFault 12 // +checkconst . StackSegmentFault
|
||||
#define GeneralProtectionFault 13 // +checkconst . GeneralProtectionFault
|
||||
#define PageFault 14 // +checkconst . PageFault
|
||||
#define X87FloatingPointException 16 // +checkconst . X87FloatingPointException
|
||||
#define AlignmentCheck 17 // +checkconst . AlignmentCheck
|
||||
#define MachineCheck 18 // +checkconst . MachineCheck
|
||||
#define SIMDFloatingPointException 19 // +checkconst . SIMDFloatingPointException
|
||||
#define VirtualizationException 20 // +checkconst . VirtualizationException
|
||||
#define SecurityException 30 // +checkconst . SecurityException
|
||||
#define SyscallInt80 128 // +checkconst . SyscallInt80
|
||||
#define Syscall 256 // +checkconst . Syscall
|
||||
|
||||
{{ with .import.linux.PtraceRegs }}
|
||||
#define PTRACE_R15 {{ .R15.Offset }}
|
||||
#define PTRACE_R14 {{ .R14.Offset }}
|
||||
#define PTRACE_R13 {{ .R13.Offset }}
|
||||
#define PTRACE_R12 {{ .R12.Offset }}
|
||||
#define PTRACE_RBP {{ .Rbp.Offset }}
|
||||
#define PTRACE_RBX {{ .Rbx.Offset }}
|
||||
#define PTRACE_R11 {{ .R11.Offset }}
|
||||
#define PTRACE_R10 {{ .R10.Offset }}
|
||||
#define PTRACE_R9 {{ .R9.Offset }}
|
||||
#define PTRACE_R8 {{ .R8.Offset }}
|
||||
#define PTRACE_RAX {{ .Rax.Offset }}
|
||||
#define PTRACE_RCX {{ .Rcx.Offset }}
|
||||
#define PTRACE_RDX {{ .Rdx.Offset }}
|
||||
#define PTRACE_RSI {{ .Rsi.Offset }}
|
||||
#define PTRACE_RDI {{ .Rdi.Offset }}
|
||||
#define PTRACE_ORIGRAX {{ .Orig_rax.Offset }}
|
||||
#define PTRACE_RIP {{ .Rip.Offset }}
|
||||
#define PTRACE_CS {{ .Cs.Offset }}
|
||||
#define PTRACE_FLAGS {{ .Eflags.Offset }}
|
||||
#define PTRACE_RSP {{ .Rsp.Offset }}
|
||||
#define PTRACE_SS {{ .Ss.Offset }}
|
||||
#define PTRACE_FS_BASE {{ .Fs_base.Offset }}
|
||||
#define PTRACE_GS_BASE {{ .Gs_base.Offset }}
|
||||
{{ end }}
|
||||
#define PTRACE_R15 0 // +checkoffset linux PtraceRegs.R15
|
||||
#define PTRACE_R14 8 // +checkoffset linux PtraceRegs.R14
|
||||
#define PTRACE_R13 16 // +checkoffset linux PtraceRegs.R13
|
||||
#define PTRACE_R12 24 // +checkoffset linux PtraceRegs.R12
|
||||
#define PTRACE_RBP 32 // +checkoffset linux PtraceRegs.Rbp
|
||||
#define PTRACE_RBX 40 // +checkoffset linux PtraceRegs.Rbx
|
||||
#define PTRACE_R11 48 // +checkoffset linux PtraceRegs.R11
|
||||
#define PTRACE_R10 56 // +checkoffset linux PtraceRegs.R10
|
||||
#define PTRACE_R9 64 // +checkoffset linux PtraceRegs.R9
|
||||
#define PTRACE_R8 72 // +checkoffset linux PtraceRegs.R8
|
||||
#define PTRACE_RAX 80 // +checkoffset linux PtraceRegs.Rax
|
||||
#define PTRACE_RCX 88 // +checkoffset linux PtraceRegs.Rcx
|
||||
#define PTRACE_RDX 96 // +checkoffset linux PtraceRegs.Rdx
|
||||
#define PTRACE_RSI 104 // +checkoffset linux PtraceRegs.Rsi
|
||||
#define PTRACE_RDI 112 // +checkoffset linux PtraceRegs.Rdi
|
||||
#define PTRACE_ORIGRAX 120 // +checkoffset linux PtraceRegs.Orig_rax
|
||||
#define PTRACE_RIP 128 // +checkoffset linux PtraceRegs.Rip
|
||||
#define PTRACE_CS 136 // +checkoffset linux PtraceRegs.Cs
|
||||
#define PTRACE_FLAGS 144 // +checkoffset linux PtraceRegs.Eflags
|
||||
#define PTRACE_RSP 152 // +checkoffset linux PtraceRegs.Rsp
|
||||
#define PTRACE_SS 160 // +checkoffset linux PtraceRegs.Ss
|
||||
#define PTRACE_FS_BASE 168 // +checkoffset linux PtraceRegs.Fs_base
|
||||
#define PTRACE_GS_BASE 176 // +checkoffset linux PtraceRegs.Gs_base
|
||||
|
||||
// Saves a register set.
|
||||
//
|
||||
|
||||
+82
-83
@@ -15,94 +15,93 @@
|
||||
#include "funcdata.h"
|
||||
#include "textflag.h"
|
||||
|
||||
#define CPU_SELF {{ .CPU.self.Offset }}
|
||||
#define CPU_REGISTERS {{ .CPU.registers.Offset }}
|
||||
#define CPU_STACK_TOP ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.stack.Offset }} + {{ .CPUArchState.stack.Size }})
|
||||
#define CPU_ERROR_CODE ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.errorCode.Offset }})
|
||||
#define CPU_ERROR_TYPE ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.errorType.Offset }})
|
||||
#define CPU_FAULT_ADDR ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.faultAddr.Offset }})
|
||||
#define CPU_FPSTATE_EL0 ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.el0Fp.Offset }})
|
||||
#define CPU_TTBR0_KVM ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.ttbr0Kvm.Offset }})
|
||||
#define CPU_TTBR0_APP ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.ttbr0App.Offset }})
|
||||
#define CPU_VECTOR_CODE ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.vecCode.Offset }})
|
||||
#define CPU_APP_ADDR ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.appAddr.Offset }})
|
||||
#define CPU_LAZY_VFP ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.lazyVFP.Offset }})
|
||||
#define CPU_APP_ASID ({{ .CPU.CPUArchState.Offset }}+{{ .CPUArchState.appASID.Offset }})
|
||||
#define CPU_SELF 0 // +checkoffset . CPU.self
|
||||
#define CPU_REGISTERS 224 // +checkoffset . CPU.registers
|
||||
#define CPU_ARCH_STATE 16 // +checkoffset . CPU.CPUArchState
|
||||
#define CPU_STACK_BOTTOM CPU_ARCH_STATE+0 // +checkoffset . CPUArchState.stack
|
||||
#define CPU_STACK_TOP CPU_STACK_BOTTOM+128 // +checksize . CPUArchState.stack
|
||||
#define CPU_ERROR_CODE CPU_ARCH_STATE+128 // +checkoffset . CPUArchState.errorCode
|
||||
#define CPU_ERROR_TYPE CPU_ARCH_STATE+136 // +checkoffset . CPUArchState.errorType
|
||||
#define CPU_FAULT_ADDR CPU_ARCH_STATE+144 // +checkoffset . CPUArchState.faultAddr
|
||||
#define CPU_FPSTATE_EL0 CPU_ARCH_STATE+152 // +checkoffset . CPUArchState.el0Fp
|
||||
#define CPU_TTBR0_KVM CPU_ARCH_STATE+160 // +checkoffset . CPUArchState.ttbr0Kvm
|
||||
#define CPU_TTBR0_APP CPU_ARCH_STATE+168 // +checkoffset . CPUArchState.ttbr0App
|
||||
#define CPU_VECTOR_CODE CPU_ARCH_STATE+176 // +checkoffset . CPUArchState.vecCode
|
||||
#define CPU_APP_ADDR CPU_ARCH_STATE+184 // +checkoffset . CPUArchState.appAddr
|
||||
#define CPU_LAZY_VFP CPU_ARCH_STATE+192 // +checkoffset . CPUArchState.lazyVFP
|
||||
#define CPU_APP_ASID CPU_ARCH_STATE+200 // +checkoffset . CPUArchState.appASID
|
||||
|
||||
// Bits.
|
||||
#define _KERNEL_FLAGS {{ .Constants.KernelFlagsSet }}
|
||||
#define _KERNEL_FLAGS 965 // +checkconst . KernelFlagsSet
|
||||
|
||||
// Vectors.
|
||||
#define El1Sync {{ .Constants.El1Sync }}
|
||||
#define El1Irq {{ .Constants.El1Irq }}
|
||||
#define El1Fiq {{ .Constants.El1Fiq }}
|
||||
#define El1Err {{ .Constants.El1Err }}
|
||||
#define El0Sync {{ .Constants.El0Sync }}
|
||||
#define El0Irq {{ .Constants.El0Irq }}
|
||||
#define El0Fiq {{ .Constants.El0Fiq }}
|
||||
#define El0Err {{ .Constants.El0Err }}
|
||||
#define El1SyncDa {{ .Constants.El1SyncDa }}
|
||||
#define El1SyncIa {{ .Constants.El1SyncIa }}
|
||||
#define El1SyncSpPc {{ .Constants.El1SyncSpPc }}
|
||||
#define El1SyncUndef {{ .Constants.El1SyncUndef }}
|
||||
#define El1SyncDbg {{ .Constants.El1SyncDbg }}
|
||||
#define El1SyncInv {{ .Constants.El1SyncInv }}
|
||||
#define El0SyncSVC {{ .Constants.El0SyncSVC }}
|
||||
#define El0SyncDa {{ .Constants.El0SyncDa }}
|
||||
#define El0SyncIa {{ .Constants.El0SyncIa }}
|
||||
#define El0SyncFpsimdAcc {{ .Constants.El0SyncFpsimdAcc }}
|
||||
#define El0SyncSveAcc {{ .Constants.El0SyncSveAcc }}
|
||||
#define El0SyncFpsimdExc {{ .Constants.El0SyncFpsimdExc }}
|
||||
#define El0SyncSys {{ .Constants.El0SyncSys }}
|
||||
#define El0SyncSpPc {{ .Constants.El0SyncSpPc }}
|
||||
#define El0SyncUndef {{ .Constants.El0SyncUndef }}
|
||||
#define El0SyncDbg {{ .Constants.El0SyncDbg }}
|
||||
#define El0SyncWfx {{ .Constants.El0SyncWfx }}
|
||||
#define El0SyncInv {{ .Constants.El0SyncInv }}
|
||||
#define El0ErrNMI {{ .Constants.El0ErrNMI }}
|
||||
#define PageFault {{ .Constants.PageFault }}
|
||||
#define Syscall {{ .Constants.Syscall }}
|
||||
#define VirtualizationException {{ .Constants.VirtualizationException }}
|
||||
#define El1Sync 4 // +checkconst . El1Sync
|
||||
#define El1Irq 5 // +checkconst . El1Irq
|
||||
#define El1Fiq 6 // +checkconst . El1Fiq
|
||||
#define El1Err 7 // +checkconst . El1Err
|
||||
#define El0Sync 8 // +checkconst . El0Sync
|
||||
#define El0Irq 9 // +checkconst . El0Irq
|
||||
#define El0Fiq 10 // +checkconst . El0Fiq
|
||||
#define El0Err 11 // +checkconst . El0Err
|
||||
#define El1SyncDa 16 // +checkconst . El1SyncDa
|
||||
#define El1SyncIa 17 // +checkconst . El1SyncIa
|
||||
#define El1SyncSpPc 18 // +checkconst . El1SyncSpPc
|
||||
#define El1SyncUndef 19 // +checkconst . El1SyncUndef
|
||||
#define El1SyncDbg 20 // +checkconst . El1SyncDbg
|
||||
#define El1SyncInv 21 // +checkconst . El1SyncInv
|
||||
#define El0SyncSVC 22 // +checkconst . El0SyncSVC
|
||||
#define El0SyncDa 23 // +checkconst . El0SyncDa
|
||||
#define El0SyncIa 24 // +checkconst . El0SyncIa
|
||||
#define El0SyncFpsimdAcc 25 // +checkconst . El0SyncFpsimdAcc
|
||||
#define El0SyncSveAcc 26 // +checkconst . El0SyncSveAcc
|
||||
#define El0SyncFpsimdExc 27 // +checkconst . El0SyncFpsimdExc
|
||||
#define El0SyncSys 28 // +checkconst . El0SyncSys
|
||||
#define El0SyncSpPc 29 // +checkconst . El0SyncSpPc
|
||||
#define El0SyncUndef 30 // +checkconst . El0SyncUndef
|
||||
#define El0SyncDbg 31 // +checkconst . El0SyncDbg
|
||||
#define El0SyncWfx 32 // +checkconst . El0SyncWfx
|
||||
#define El0SyncInv 33 // +checkconst . El0SyncInv
|
||||
#define El0ErrNMI 34 // +checkconst . El0ErrNMI
|
||||
#define PageFault 23 // +checkconst . PageFault
|
||||
#define Syscall 22 // +checkconst . Syscall
|
||||
#define VirtualizationException 35 // +checkconst . VirtualizationException
|
||||
|
||||
{{ with .import.linux.PtraceRegs }}
|
||||
#define PTRACE_R0 ({{ .Regs.Offset }} + 0*8)
|
||||
#define PTRACE_R1 ({{ .Regs.Offset }} + 1*8)
|
||||
#define PTRACE_R2 ({{ .Regs.Offset }} + 2*8)
|
||||
#define PTRACE_R3 ({{ .Regs.Offset }} + 3*8)
|
||||
#define PTRACE_R4 ({{ .Regs.Offset }} + 4*8)
|
||||
#define PTRACE_R5 ({{ .Regs.Offset }} + 5*8)
|
||||
#define PTRACE_R6 ({{ .Regs.Offset }} + 6*8)
|
||||
#define PTRACE_R7 ({{ .Regs.Offset }} + 7*8)
|
||||
#define PTRACE_R8 ({{ .Regs.Offset }} + 8*8)
|
||||
#define PTRACE_R9 ({{ .Regs.Offset }} + 9*8)
|
||||
#define PTRACE_R10 ({{ .Regs.Offset }} + 10*8)
|
||||
#define PTRACE_R11 ({{ .Regs.Offset }} + 11*8)
|
||||
#define PTRACE_R12 ({{ .Regs.Offset }} + 12*8)
|
||||
#define PTRACE_R13 ({{ .Regs.Offset }} + 13*8)
|
||||
#define PTRACE_R14 ({{ .Regs.Offset }} + 14*8)
|
||||
#define PTRACE_R15 ({{ .Regs.Offset }} + 15*8)
|
||||
#define PTRACE_R16 ({{ .Regs.Offset }} + 16*8)
|
||||
#define PTRACE_R17 ({{ .Regs.Offset }} + 17*8)
|
||||
#define PTRACE_R18 ({{ .Regs.Offset }} + 18*8)
|
||||
#define PTRACE_R19 ({{ .Regs.Offset }} + 19*8)
|
||||
#define PTRACE_R20 ({{ .Regs.Offset }} + 20*8)
|
||||
#define PTRACE_R21 ({{ .Regs.Offset }} + 21*8)
|
||||
#define PTRACE_R22 ({{ .Regs.Offset }} + 22*8)
|
||||
#define PTRACE_R23 ({{ .Regs.Offset }} + 23*8)
|
||||
#define PTRACE_R24 ({{ .Regs.Offset }} + 24*8)
|
||||
#define PTRACE_R25 ({{ .Regs.Offset }} + 25*8)
|
||||
#define PTRACE_R26 ({{ .Regs.Offset }} + 26*8)
|
||||
#define PTRACE_R27 ({{ .Regs.Offset }} + 27*8)
|
||||
#define PTRACE_R28 ({{ .Regs.Offset }} + 28*8)
|
||||
#define PTRACE_R29 ({{ .Regs.Offset }} + 29*8)
|
||||
#define PTRACE_R30 ({{ .Regs.Offset }} + 30*8)
|
||||
#define PTRACE_SP {{ .Sp.Offset }}
|
||||
#define PTRACE_PC {{ .Pc.Offset }}
|
||||
#define PTRACE_PSTATE {{ .Pstate.Offset }}
|
||||
{{ end }}
|
||||
{{ with .import.arch.Registers }}
|
||||
#define PTRACE_TLS {{ .TPIDR_EL0.Offset }}
|
||||
{{ end }}
|
||||
#define PTRACE_REGS 0 // +checkoffset linux PtraceRegs.Regs
|
||||
#define PTRACE_R0 (PTRACE_REGS + 0*8)
|
||||
#define PTRACE_R1 (PTRACE_REGS + 1*8)
|
||||
#define PTRACE_R2 (PTRACE_REGS + 2*8)
|
||||
#define PTRACE_R3 (PTRACE_REGS + 3*8)
|
||||
#define PTRACE_R4 (PTRACE_REGS + 4*8)
|
||||
#define PTRACE_R5 (PTRACE_REGS + 5*8)
|
||||
#define PTRACE_R6 (PTRACE_REGS + 6*8)
|
||||
#define PTRACE_R7 (PTRACE_REGS + 7*8)
|
||||
#define PTRACE_R8 (PTRACE_REGS + 8*8)
|
||||
#define PTRACE_R9 (PTRACE_REGS + 9*8)
|
||||
#define PTRACE_R10 (PTRACE_REGS + 10*8)
|
||||
#define PTRACE_R11 (PTRACE_REGS + 11*8)
|
||||
#define PTRACE_R12 (PTRACE_REGS + 12*8)
|
||||
#define PTRACE_R13 (PTRACE_REGS + 13*8)
|
||||
#define PTRACE_R14 (PTRACE_REGS + 14*8)
|
||||
#define PTRACE_R15 (PTRACE_REGS + 15*8)
|
||||
#define PTRACE_R16 (PTRACE_REGS + 16*8)
|
||||
#define PTRACE_R17 (PTRACE_REGS + 17*8)
|
||||
#define PTRACE_R18 (PTRACE_REGS + 18*8)
|
||||
#define PTRACE_R19 (PTRACE_REGS + 19*8)
|
||||
#define PTRACE_R20 (PTRACE_REGS + 20*8)
|
||||
#define PTRACE_R21 (PTRACE_REGS + 21*8)
|
||||
#define PTRACE_R22 (PTRACE_REGS + 22*8)
|
||||
#define PTRACE_R23 (PTRACE_REGS + 23*8)
|
||||
#define PTRACE_R24 (PTRACE_REGS + 24*8)
|
||||
#define PTRACE_R25 (PTRACE_REGS + 25*8)
|
||||
#define PTRACE_R26 (PTRACE_REGS + 26*8)
|
||||
#define PTRACE_R27 (PTRACE_REGS + 27*8)
|
||||
#define PTRACE_R28 (PTRACE_REGS + 28*8)
|
||||
#define PTRACE_R29 (PTRACE_REGS + 29*8)
|
||||
#define PTRACE_R30 (PTRACE_REGS + 30*8)
|
||||
#define PTRACE_SP 248 // +checkoffset linux PtraceRegs.Sp
|
||||
#define PTRACE_PC 256 // +checkoffset linux PtraceRegs.Pc
|
||||
#define PTRACE_PSTATE 264 // +checkoffset linux PtraceRegs.Pstate
|
||||
#define PTRACE_TLS 272 // +checkoffset arch Registers.TPIDR_EL0
|
||||
|
||||
// Saves a register set.
|
||||
//
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
// Copyright 2018 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.
|
||||
|
||||
package ring0
|
||||
|
||||
import (
|
||||
// Used for template generation.
|
||||
_ "gvisor.dev/gvisor/pkg/abi/linux"
|
||||
)
|
||||
@@ -14,3 +14,8 @@
|
||||
|
||||
// Package ring0 provides basic operating system-level stubs.
|
||||
package ring0
|
||||
|
||||
import (
|
||||
// Required for facts checks.
|
||||
_ "gvisor.dev/gvisor/pkg/abi/linux"
|
||||
)
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
load("//tools:arch.bzl", "arch_genrule", "select_arch")
|
||||
load("//tools:defs.bzl", "go_library", "go_test")
|
||||
load("//tools/go_generics:defs.bzl", "go_template_instance")
|
||||
load("//tools/nogo:defs.bzl", "nogo_facts")
|
||||
|
||||
package(licenses = ["notice"])
|
||||
|
||||
@@ -16,37 +14,6 @@ go_template_instance(
|
||||
},
|
||||
)
|
||||
|
||||
nogo_facts(
|
||||
name = "bluepill_impl",
|
||||
srcs = [
|
||||
"//pkg/ring0:aarch64.go",
|
||||
"//pkg/ring0:defs.go",
|
||||
"//pkg/ring0:defs_amd64.go",
|
||||
"//pkg/ring0:defs_arm64.go",
|
||||
"//pkg/ring0:entry_template.go",
|
||||
"//pkg/ring0:x86.go",
|
||||
],
|
||||
output = "bluepill_impl.s",
|
||||
template = select_arch(
|
||||
amd64 = "bluepill_amd64.s",
|
||||
arm64 = "bluepill_arm64.s",
|
||||
),
|
||||
deps = [
|
||||
"//pkg/abi/linux",
|
||||
"//pkg/cpuid",
|
||||
"//pkg/hostarch",
|
||||
"//pkg/ring0/pagetables",
|
||||
"//pkg/sentry/arch",
|
||||
"//pkg/sentry/arch/fpu",
|
||||
],
|
||||
)
|
||||
|
||||
arch_genrule(
|
||||
name = "bluepill_impl_arch",
|
||||
src = ":bluepill_impl",
|
||||
template = "bluepill_impl_%s.s",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "kvm",
|
||||
srcs = [
|
||||
@@ -57,8 +24,10 @@ go_library(
|
||||
"bluepill.go",
|
||||
"bluepill_allocator.go",
|
||||
"bluepill_amd64.go",
|
||||
"bluepill_amd64.s",
|
||||
"bluepill_amd64_unsafe.go",
|
||||
"bluepill_arm64.go",
|
||||
"bluepill_arm64.s",
|
||||
"bluepill_arm64_unsafe.go",
|
||||
"bluepill_fault.go",
|
||||
"bluepill_unsafe.go",
|
||||
@@ -84,7 +53,6 @@ go_library(
|
||||
"physical_map_amd64.go",
|
||||
"physical_map_arm64.go",
|
||||
"virtual_map.go",
|
||||
":bluepill_impl_arch",
|
||||
],
|
||||
visibility = ["//pkg/sentry:internal"],
|
||||
deps = [
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
// ENTRY_CPU_SELF is the location of the CPU in the entry struct.
|
||||
//
|
||||
// This is sourced from ring0.
|
||||
#define ENTRY_CPU_SELF {{ .kernelEntry.cpuSelf.Offset }}
|
||||
#define ENTRY_CPU_SELF 272 // +checkoffset ring0 kernelEntry.cpuSelf
|
||||
|
||||
// Context offsets.
|
||||
//
|
||||
|
||||
@@ -1,35 +1,8 @@
|
||||
load("//tools:arch.bzl", "arch_genrule", "select_arch")
|
||||
load("//tools:defs.bzl", "go_library")
|
||||
load("//tools/nogo:defs.bzl", "nogo_facts")
|
||||
load("//tools/go_generics:defs.bzl", "go_template_instance")
|
||||
|
||||
package(licenses = ["notice"])
|
||||
|
||||
nogo_facts(
|
||||
name = "stub_impl",
|
||||
srcs = [
|
||||
"stub_defs.go",
|
||||
"syscall_thread_defs.go",
|
||||
],
|
||||
output = "stub_impl.s",
|
||||
template = select_arch(
|
||||
amd64 = "stub_amd64.s",
|
||||
arm64 = "stub_arm64.s",
|
||||
),
|
||||
deps = [
|
||||
"//pkg/abi/linux",
|
||||
"//pkg/atomicbitops",
|
||||
"//pkg/hostarch",
|
||||
"@org_golang_x_sys//unix:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
arch_genrule(
|
||||
name = "stub_impl_arch",
|
||||
src = ":stub_impl",
|
||||
template = "stub_impl_%s.s",
|
||||
)
|
||||
|
||||
go_template_instance(
|
||||
name = "subprocess_list",
|
||||
out = "subprocess_list.go",
|
||||
@@ -50,6 +23,8 @@ go_library(
|
||||
"filters_arm64.go",
|
||||
"lib_amd64.s",
|
||||
"lib_arm64.s",
|
||||
"stub_amd64.s",
|
||||
"stub_arm64.s",
|
||||
"stub_defs.go",
|
||||
"stub_unsafe.go",
|
||||
"subprocess.go",
|
||||
@@ -76,7 +51,6 @@ go_library(
|
||||
"systrap_arm64.go",
|
||||
"systrap_arm64_unsafe.go",
|
||||
"systrap_unsafe.go",
|
||||
":stub_impl_arch",
|
||||
],
|
||||
visibility = ["//:sandbox"],
|
||||
deps = [
|
||||
|
||||
@@ -15,35 +15,36 @@
|
||||
#include "funcdata.h"
|
||||
#include "textflag.h"
|
||||
|
||||
#define SYS_GETPID {{ .import.unix.Constants.SYS_GETPID }}
|
||||
#define SYS_EXIT {{ .import.unix.Constants.SYS_EXIT }}
|
||||
#define SYS_KILL {{ .import.unix.Constants.SYS_KILL }}
|
||||
#define SYS_GETPPID {{ .import.unix.Constants.SYS_GETPPID }}
|
||||
#define SIGKILL {{ .import.unix.Constants.SIGKILL }}
|
||||
#define SIGSTOP {{ .import.unix.Constants.SIGSTOP }}
|
||||
#define SYS_PRCTL {{ .import.unix.Constants.SYS_PRCTL }}
|
||||
#define PR_SET_PDEATHSIG {{ .import.unix.Constants.PR_SET_PDEATHSIG }}
|
||||
#define SYS_GETPID 39 // +checkconst unix SYS_GETPID
|
||||
#define SYS_EXIT 60 // +checkconst unix SYS_EXIT
|
||||
#define SYS_KILL 62 // +checkconst unix SYS_KILL
|
||||
#define SYS_GETPPID 110 // +checkconst unix SYS_GETPPID
|
||||
#define SIGKILL 9 // +checkconst unix SIGKILL
|
||||
#define SIGSTOP 19 // +checkconst unix SIGSTOP
|
||||
#define SYS_PRCTL 157 // +checkconst unix SYS_PRCTL
|
||||
#define PR_SET_PDEATHSIG 1 // +checkconst unix PR_SET_PDEATHSIG
|
||||
|
||||
#define SYS_FUTEX {{ .import.unix.Constants.SYS_FUTEX }}
|
||||
#define FUTEX_WAKE {{ .import.linux.Constants.FUTEX_WAKE }}
|
||||
#define FUTEX_WAIT {{ .import.linux.Constants.FUTEX_WAIT }}
|
||||
#define SYS_FUTEX 202 // +checkconst unix SYS_FUTEX
|
||||
#define FUTEX_WAKE 1 // +checkconst linux FUTEX_WAKE
|
||||
#define FUTEX_WAIT 0 // +checkconst linux FUTEX_WAIT
|
||||
|
||||
#define NEW_STUB {{ .Constants._NEW_STUB }}
|
||||
#define RUN_SYSCALL_LOOP {{ .Constants._RUN_SYSCALL_LOOP }}
|
||||
#define NEW_STUB 1 // +checkconst . _NEW_STUB
|
||||
#define RUN_SYSCALL_LOOP 5 // +checkconst . _RUN_SYSCALL_LOOP
|
||||
|
||||
// syscallSentryMessage offsets.
|
||||
#define SENTRY_MESSAGE_STATE {{ .syscallSentryMessage.state.Offset }}
|
||||
#define SENTRY_MESSAGE_SYSNO {{ .syscallSentryMessage.sysno.Offset }}
|
||||
#define SENTRY_MESSAGE_ARG0 ({{ .syscallSentryMessage.args.Offset }} + 0*8)
|
||||
#define SENTRY_MESSAGE_ARG1 ({{ .syscallSentryMessage.args.Offset }} + 1*8)
|
||||
#define SENTRY_MESSAGE_ARG2 ({{ .syscallSentryMessage.args.Offset }} + 2*8)
|
||||
#define SENTRY_MESSAGE_ARG3 ({{ .syscallSentryMessage.args.Offset }} + 3*8)
|
||||
#define SENTRY_MESSAGE_ARG4 ({{ .syscallSentryMessage.args.Offset }} + 4*8)
|
||||
#define SENTRY_MESSAGE_ARG5 ({{ .syscallSentryMessage.args.Offset }} + 5*8)
|
||||
#define SENTRY_MESSAGE_STATE 0 // +checkoffset . syscallSentryMessage.state
|
||||
#define SENTRY_MESSAGE_SYSNO 8 // +checkoffset . syscallSentryMessage.sysno
|
||||
#define SENTRY_MESSAGE_ARGS 16 // +checkoffset . syscallSentryMessage.args
|
||||
#define SENTRY_MESSAGE_ARG0 (SENTRY_MESSAGE_ARGS + 0*8)
|
||||
#define SENTRY_MESSAGE_ARG1 (SENTRY_MESSAGE_ARGS + 1*8)
|
||||
#define SENTRY_MESSAGE_ARG2 (SENTRY_MESSAGE_ARGS + 2*8)
|
||||
#define SENTRY_MESSAGE_ARG3 (SENTRY_MESSAGE_ARGS + 3*8)
|
||||
#define SENTRY_MESSAGE_ARG4 (SENTRY_MESSAGE_ARGS + 4*8)
|
||||
#define SENTRY_MESSAGE_ARG5 (SENTRY_MESSAGE_ARGS + 5*8)
|
||||
|
||||
// syscallStubMessage offsets.
|
||||
#define STUB_MESSAGE_OFFSET {{ .Constants.syscallStubMessageOffset }}
|
||||
#define STUB_MESSAGE_RET {{ .syscallStubMessage.ret.Offset }}
|
||||
#define STUB_MESSAGE_OFFSET 4096 // +checkconst . syscallStubMessageOffset
|
||||
#define STUB_MESSAGE_RET 0 // +checkoffset . syscallStubMessage.ret
|
||||
|
||||
// initStubProcess bootstraps the child and sends itself SIGSTOP to wait for attach.
|
||||
//
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user