Merge release-20201208.0-92-gd302c0570 (automated)
This commit is contained in:
commit
7698cd15cd
File diff suppressed because it is too large
Load Diff
|
@ -23,6 +23,183 @@ var _ marshal.Marshallable = (*Uint32)(nil)
|
|||
var _ marshal.Marshallable = (*Uint64)(nil)
|
||||
var _ marshal.Marshallable = (*Uint8)(nil)
|
||||
|
||||
// SizeBytes implements marshal.Marshallable.SizeBytes.
|
||||
//go:nosplit
|
||||
func (i *Int8) SizeBytes() int {
|
||||
return 1
|
||||
}
|
||||
|
||||
// MarshalBytes implements marshal.Marshallable.MarshalBytes.
|
||||
func (i *Int8) MarshalBytes(dst []byte) {
|
||||
dst[0] = byte(*i)
|
||||
}
|
||||
|
||||
// UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes.
|
||||
func (i *Int8) UnmarshalBytes(src []byte) {
|
||||
*i = Int8(int8(src[0]))
|
||||
}
|
||||
|
||||
// Packed implements marshal.Marshallable.Packed.
|
||||
//go:nosplit
|
||||
func (i *Int8) Packed() bool {
|
||||
// Scalar newtypes are always packed.
|
||||
return true
|
||||
}
|
||||
|
||||
// MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe.
|
||||
func (i *Int8) MarshalUnsafe(dst []byte) {
|
||||
safecopy.CopyIn(dst, unsafe.Pointer(i))
|
||||
}
|
||||
|
||||
// UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe.
|
||||
func (i *Int8) UnmarshalUnsafe(src []byte) {
|
||||
safecopy.CopyOut(unsafe.Pointer(i), src)
|
||||
}
|
||||
|
||||
// CopyOutN implements marshal.Marshallable.CopyOutN.
|
||||
//go:nosplit
|
||||
func (i *Int8) CopyOutN(cc marshal.CopyContext, addr usermem.Addr, limit int) (int, error) {
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(i)))
|
||||
hdr.Len = i.SizeBytes()
|
||||
hdr.Cap = i.SizeBytes()
|
||||
|
||||
length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that i
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(i) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// CopyOut implements marshal.Marshallable.CopyOut.
|
||||
//go:nosplit
|
||||
func (i *Int8) CopyOut(cc marshal.CopyContext, addr usermem.Addr) (int, error) {
|
||||
return i.CopyOutN(cc, addr, i.SizeBytes())
|
||||
}
|
||||
|
||||
// CopyIn implements marshal.Marshallable.CopyIn.
|
||||
//go:nosplit
|
||||
func (i *Int8) CopyIn(cc marshal.CopyContext, addr usermem.Addr) (int, error) {
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(i)))
|
||||
hdr.Len = i.SizeBytes()
|
||||
hdr.Cap = i.SizeBytes()
|
||||
|
||||
length, err := cc.CopyInBytes(addr, buf) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that i
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(i) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// WriteTo implements io.WriterTo.WriteTo.
|
||||
func (i *Int8) WriteTo(w io.Writer) (int64, error) {
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(i)))
|
||||
hdr.Len = i.SizeBytes()
|
||||
hdr.Cap = i.SizeBytes()
|
||||
|
||||
length, err := w.Write(buf)
|
||||
// Since we bypassed the compiler's escape analysis, indicate that i
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(i) // escapes: replaced by intrinsic.
|
||||
return int64(length), err
|
||||
}
|
||||
|
||||
// CopyInt8SliceIn copies in a slice of int8 objects from the task's memory.
|
||||
//go:nosplit
|
||||
func CopyInt8SliceIn(cc marshal.CopyContext, addr usermem.Addr, dst []int8) (int, error) {
|
||||
count := len(dst)
|
||||
if count == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
size := (*Int8)(nil).SizeBytes()
|
||||
|
||||
ptr := unsafe.Pointer(&dst)
|
||||
val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data))
|
||||
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(val)
|
||||
hdr.Len = size * count
|
||||
hdr.Cap = size * count
|
||||
|
||||
length, err := cc.CopyInBytes(addr, buf) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that dst
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(dst) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// CopyInt8SliceOut copies a slice of int8 objects to the task's memory.
|
||||
//go:nosplit
|
||||
func CopyInt8SliceOut(cc marshal.CopyContext, addr usermem.Addr, src []int8) (int, error) {
|
||||
count := len(src)
|
||||
if count == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
size := (*Int8)(nil).SizeBytes()
|
||||
|
||||
ptr := unsafe.Pointer(&src)
|
||||
val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data))
|
||||
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(val)
|
||||
hdr.Len = size * count
|
||||
hdr.Cap = size * count
|
||||
|
||||
length, err := cc.CopyOutBytes(addr, buf) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that src
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(src) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// MarshalUnsafeInt8Slice is like Int8.MarshalUnsafe, but for a []Int8.
|
||||
func MarshalUnsafeInt8Slice(src []Int8, dst []byte) (int, error) {
|
||||
count := len(src)
|
||||
if count == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
size := (*Int8)(nil).SizeBytes()
|
||||
|
||||
ptr := unsafe.Pointer(&src)
|
||||
val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data))
|
||||
|
||||
length, err := safecopy.CopyIn(dst[:(size*count)], val)
|
||||
// Since we bypassed the compiler's escape analysis, indicate that src
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(src) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// UnmarshalUnsafeInt8Slice is like Int8.UnmarshalUnsafe, but for a []Int8.
|
||||
func UnmarshalUnsafeInt8Slice(dst []Int8, src []byte) (int, error) {
|
||||
count := len(dst)
|
||||
if count == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
size := (*Int8)(nil).SizeBytes()
|
||||
|
||||
ptr := unsafe.Pointer(&dst)
|
||||
val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data))
|
||||
|
||||
length, err := safecopy.CopyOut(val, src[:(size*count)])
|
||||
// Since we bypassed the compiler's escape analysis, indicate that dst
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(dst) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// SizeBytes implements marshal.Marshallable.SizeBytes.
|
||||
//go:nosplit
|
||||
func (u *Uint8) SizeBytes() int {
|
||||
|
@ -1262,180 +1439,3 @@ func UnmarshalUnsafeUint64Slice(dst []Uint64, src []byte) (int, error) {
|
|||
return length, err
|
||||
}
|
||||
|
||||
// SizeBytes implements marshal.Marshallable.SizeBytes.
|
||||
//go:nosplit
|
||||
func (i *Int8) SizeBytes() int {
|
||||
return 1
|
||||
}
|
||||
|
||||
// MarshalBytes implements marshal.Marshallable.MarshalBytes.
|
||||
func (i *Int8) MarshalBytes(dst []byte) {
|
||||
dst[0] = byte(*i)
|
||||
}
|
||||
|
||||
// UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes.
|
||||
func (i *Int8) UnmarshalBytes(src []byte) {
|
||||
*i = Int8(int8(src[0]))
|
||||
}
|
||||
|
||||
// Packed implements marshal.Marshallable.Packed.
|
||||
//go:nosplit
|
||||
func (i *Int8) Packed() bool {
|
||||
// Scalar newtypes are always packed.
|
||||
return true
|
||||
}
|
||||
|
||||
// MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe.
|
||||
func (i *Int8) MarshalUnsafe(dst []byte) {
|
||||
safecopy.CopyIn(dst, unsafe.Pointer(i))
|
||||
}
|
||||
|
||||
// UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe.
|
||||
func (i *Int8) UnmarshalUnsafe(src []byte) {
|
||||
safecopy.CopyOut(unsafe.Pointer(i), src)
|
||||
}
|
||||
|
||||
// CopyOutN implements marshal.Marshallable.CopyOutN.
|
||||
//go:nosplit
|
||||
func (i *Int8) CopyOutN(cc marshal.CopyContext, addr usermem.Addr, limit int) (int, error) {
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(i)))
|
||||
hdr.Len = i.SizeBytes()
|
||||
hdr.Cap = i.SizeBytes()
|
||||
|
||||
length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that i
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(i) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// CopyOut implements marshal.Marshallable.CopyOut.
|
||||
//go:nosplit
|
||||
func (i *Int8) CopyOut(cc marshal.CopyContext, addr usermem.Addr) (int, error) {
|
||||
return i.CopyOutN(cc, addr, i.SizeBytes())
|
||||
}
|
||||
|
||||
// CopyIn implements marshal.Marshallable.CopyIn.
|
||||
//go:nosplit
|
||||
func (i *Int8) CopyIn(cc marshal.CopyContext, addr usermem.Addr) (int, error) {
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(i)))
|
||||
hdr.Len = i.SizeBytes()
|
||||
hdr.Cap = i.SizeBytes()
|
||||
|
||||
length, err := cc.CopyInBytes(addr, buf) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that i
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(i) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// WriteTo implements io.WriterTo.WriteTo.
|
||||
func (i *Int8) WriteTo(w io.Writer) (int64, error) {
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(i)))
|
||||
hdr.Len = i.SizeBytes()
|
||||
hdr.Cap = i.SizeBytes()
|
||||
|
||||
length, err := w.Write(buf)
|
||||
// Since we bypassed the compiler's escape analysis, indicate that i
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(i) // escapes: replaced by intrinsic.
|
||||
return int64(length), err
|
||||
}
|
||||
|
||||
// CopyInt8SliceIn copies in a slice of int8 objects from the task's memory.
|
||||
//go:nosplit
|
||||
func CopyInt8SliceIn(cc marshal.CopyContext, addr usermem.Addr, dst []int8) (int, error) {
|
||||
count := len(dst)
|
||||
if count == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
size := (*Int8)(nil).SizeBytes()
|
||||
|
||||
ptr := unsafe.Pointer(&dst)
|
||||
val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data))
|
||||
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(val)
|
||||
hdr.Len = size * count
|
||||
hdr.Cap = size * count
|
||||
|
||||
length, err := cc.CopyInBytes(addr, buf) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that dst
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(dst) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// CopyInt8SliceOut copies a slice of int8 objects to the task's memory.
|
||||
//go:nosplit
|
||||
func CopyInt8SliceOut(cc marshal.CopyContext, addr usermem.Addr, src []int8) (int, error) {
|
||||
count := len(src)
|
||||
if count == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
size := (*Int8)(nil).SizeBytes()
|
||||
|
||||
ptr := unsafe.Pointer(&src)
|
||||
val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data))
|
||||
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(val)
|
||||
hdr.Len = size * count
|
||||
hdr.Cap = size * count
|
||||
|
||||
length, err := cc.CopyOutBytes(addr, buf) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that src
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(src) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// MarshalUnsafeInt8Slice is like Int8.MarshalUnsafe, but for a []Int8.
|
||||
func MarshalUnsafeInt8Slice(src []Int8, dst []byte) (int, error) {
|
||||
count := len(src)
|
||||
if count == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
size := (*Int8)(nil).SizeBytes()
|
||||
|
||||
ptr := unsafe.Pointer(&src)
|
||||
val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data))
|
||||
|
||||
length, err := safecopy.CopyIn(dst[:(size*count)], val)
|
||||
// Since we bypassed the compiler's escape analysis, indicate that src
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(src) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// UnmarshalUnsafeInt8Slice is like Int8.UnmarshalUnsafe, but for a []Int8.
|
||||
func UnmarshalUnsafeInt8Slice(dst []Int8, src []byte) (int, error) {
|
||||
count := len(dst)
|
||||
if count == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
size := (*Int8)(nil).SizeBytes()
|
||||
|
||||
ptr := unsafe.Pointer(&dst)
|
||||
val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data))
|
||||
|
||||
length, err := safecopy.CopyOut(val, src[:(size*count)])
|
||||
// Since we bypassed the compiler's escape analysis, indicate that dst
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(dst) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
|
|
|
@ -22,116 +22,6 @@ var _ marshal.Marshallable = (*SignalInfo)(nil)
|
|||
var _ marshal.Marshallable = (*SignalStack)(nil)
|
||||
var _ marshal.Marshallable = (*linux.SignalSet)(nil)
|
||||
|
||||
// SizeBytes implements marshal.Marshallable.SizeBytes.
|
||||
func (s *SignalInfo) SizeBytes() int {
|
||||
return 16 +
|
||||
1*(128-16)
|
||||
}
|
||||
|
||||
// MarshalBytes implements marshal.Marshallable.MarshalBytes.
|
||||
func (s *SignalInfo) MarshalBytes(dst []byte) {
|
||||
usermem.ByteOrder.PutUint32(dst[:4], uint32(s.Signo))
|
||||
dst = dst[4:]
|
||||
usermem.ByteOrder.PutUint32(dst[:4], uint32(s.Errno))
|
||||
dst = dst[4:]
|
||||
usermem.ByteOrder.PutUint32(dst[:4], uint32(s.Code))
|
||||
dst = dst[4:]
|
||||
// Padding: dst[:sizeof(uint32)] ~= uint32(0)
|
||||
dst = dst[4:]
|
||||
for idx := 0; idx < (128-16); idx++ {
|
||||
dst[0] = byte(s.Fields[idx])
|
||||
dst = dst[1:]
|
||||
}
|
||||
}
|
||||
|
||||
// UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes.
|
||||
func (s *SignalInfo) UnmarshalBytes(src []byte) {
|
||||
s.Signo = int32(usermem.ByteOrder.Uint32(src[:4]))
|
||||
src = src[4:]
|
||||
s.Errno = int32(usermem.ByteOrder.Uint32(src[:4]))
|
||||
src = src[4:]
|
||||
s.Code = int32(usermem.ByteOrder.Uint32(src[:4]))
|
||||
src = src[4:]
|
||||
// Padding: var _ uint32 ~= src[:sizeof(uint32)]
|
||||
src = src[4:]
|
||||
for idx := 0; idx < (128-16); idx++ {
|
||||
s.Fields[idx] = src[0]
|
||||
src = src[1:]
|
||||
}
|
||||
}
|
||||
|
||||
// Packed implements marshal.Marshallable.Packed.
|
||||
//go:nosplit
|
||||
func (s *SignalInfo) Packed() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe.
|
||||
func (s *SignalInfo) MarshalUnsafe(dst []byte) {
|
||||
safecopy.CopyIn(dst, unsafe.Pointer(s))
|
||||
}
|
||||
|
||||
// UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe.
|
||||
func (s *SignalInfo) UnmarshalUnsafe(src []byte) {
|
||||
safecopy.CopyOut(unsafe.Pointer(s), src)
|
||||
}
|
||||
|
||||
// CopyOutN implements marshal.Marshallable.CopyOutN.
|
||||
//go:nosplit
|
||||
func (s *SignalInfo) CopyOutN(cc marshal.CopyContext, addr usermem.Addr, limit int) (int, error) {
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s)))
|
||||
hdr.Len = s.SizeBytes()
|
||||
hdr.Cap = s.SizeBytes()
|
||||
|
||||
length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that s
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(s) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// CopyOut implements marshal.Marshallable.CopyOut.
|
||||
//go:nosplit
|
||||
func (s *SignalInfo) CopyOut(cc marshal.CopyContext, addr usermem.Addr) (int, error) {
|
||||
return s.CopyOutN(cc, addr, s.SizeBytes())
|
||||
}
|
||||
|
||||
// CopyIn implements marshal.Marshallable.CopyIn.
|
||||
//go:nosplit
|
||||
func (s *SignalInfo) CopyIn(cc marshal.CopyContext, addr usermem.Addr) (int, error) {
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s)))
|
||||
hdr.Len = s.SizeBytes()
|
||||
hdr.Cap = s.SizeBytes()
|
||||
|
||||
length, err := cc.CopyInBytes(addr, buf) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that s
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(s) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// WriteTo implements io.WriterTo.WriteTo.
|
||||
func (s *SignalInfo) WriteTo(writer io.Writer) (int64, error) {
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s)))
|
||||
hdr.Len = s.SizeBytes()
|
||||
hdr.Cap = s.SizeBytes()
|
||||
|
||||
length, err := writer.Write(buf)
|
||||
// Since we bypassed the compiler's escape analysis, indicate that s
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(s) // escapes: replaced by intrinsic.
|
||||
return int64(length), err
|
||||
}
|
||||
|
||||
// SizeBytes implements marshal.Marshallable.SizeBytes.
|
||||
func (s *SignalAct) SizeBytes() int {
|
||||
return 24 +
|
||||
|
@ -370,3 +260,113 @@ func (s *SignalStack) WriteTo(writer io.Writer) (int64, error) {
|
|||
return int64(length), err
|
||||
}
|
||||
|
||||
// SizeBytes implements marshal.Marshallable.SizeBytes.
|
||||
func (s *SignalInfo) SizeBytes() int {
|
||||
return 16 +
|
||||
1*(128-16)
|
||||
}
|
||||
|
||||
// MarshalBytes implements marshal.Marshallable.MarshalBytes.
|
||||
func (s *SignalInfo) MarshalBytes(dst []byte) {
|
||||
usermem.ByteOrder.PutUint32(dst[:4], uint32(s.Signo))
|
||||
dst = dst[4:]
|
||||
usermem.ByteOrder.PutUint32(dst[:4], uint32(s.Errno))
|
||||
dst = dst[4:]
|
||||
usermem.ByteOrder.PutUint32(dst[:4], uint32(s.Code))
|
||||
dst = dst[4:]
|
||||
// Padding: dst[:sizeof(uint32)] ~= uint32(0)
|
||||
dst = dst[4:]
|
||||
for idx := 0; idx < (128-16); idx++ {
|
||||
dst[0] = byte(s.Fields[idx])
|
||||
dst = dst[1:]
|
||||
}
|
||||
}
|
||||
|
||||
// UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes.
|
||||
func (s *SignalInfo) UnmarshalBytes(src []byte) {
|
||||
s.Signo = int32(usermem.ByteOrder.Uint32(src[:4]))
|
||||
src = src[4:]
|
||||
s.Errno = int32(usermem.ByteOrder.Uint32(src[:4]))
|
||||
src = src[4:]
|
||||
s.Code = int32(usermem.ByteOrder.Uint32(src[:4]))
|
||||
src = src[4:]
|
||||
// Padding: var _ uint32 ~= src[:sizeof(uint32)]
|
||||
src = src[4:]
|
||||
for idx := 0; idx < (128-16); idx++ {
|
||||
s.Fields[idx] = src[0]
|
||||
src = src[1:]
|
||||
}
|
||||
}
|
||||
|
||||
// Packed implements marshal.Marshallable.Packed.
|
||||
//go:nosplit
|
||||
func (s *SignalInfo) Packed() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe.
|
||||
func (s *SignalInfo) MarshalUnsafe(dst []byte) {
|
||||
safecopy.CopyIn(dst, unsafe.Pointer(s))
|
||||
}
|
||||
|
||||
// UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe.
|
||||
func (s *SignalInfo) UnmarshalUnsafe(src []byte) {
|
||||
safecopy.CopyOut(unsafe.Pointer(s), src)
|
||||
}
|
||||
|
||||
// CopyOutN implements marshal.Marshallable.CopyOutN.
|
||||
//go:nosplit
|
||||
func (s *SignalInfo) CopyOutN(cc marshal.CopyContext, addr usermem.Addr, limit int) (int, error) {
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s)))
|
||||
hdr.Len = s.SizeBytes()
|
||||
hdr.Cap = s.SizeBytes()
|
||||
|
||||
length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that s
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(s) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// CopyOut implements marshal.Marshallable.CopyOut.
|
||||
//go:nosplit
|
||||
func (s *SignalInfo) CopyOut(cc marshal.CopyContext, addr usermem.Addr) (int, error) {
|
||||
return s.CopyOutN(cc, addr, s.SizeBytes())
|
||||
}
|
||||
|
||||
// CopyIn implements marshal.Marshallable.CopyIn.
|
||||
//go:nosplit
|
||||
func (s *SignalInfo) CopyIn(cc marshal.CopyContext, addr usermem.Addr) (int, error) {
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s)))
|
||||
hdr.Len = s.SizeBytes()
|
||||
hdr.Cap = s.SizeBytes()
|
||||
|
||||
length, err := cc.CopyInBytes(addr, buf) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that s
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(s) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// WriteTo implements io.WriterTo.WriteTo.
|
||||
func (s *SignalInfo) WriteTo(writer io.Writer) (int64, error) {
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s)))
|
||||
hdr.Len = s.SizeBytes()
|
||||
hdr.Cap = s.SizeBytes()
|
||||
|
||||
length, err := writer.Write(buf)
|
||||
// Since we bypassed the compiler's escape analysis, indicate that s
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(s) // escapes: replaced by intrinsic.
|
||||
return int64(length), err
|
||||
}
|
||||
|
||||
|
|
|
@ -24,149 +24,6 @@ var _ marshal.Marshallable = (*SignalStack)(nil)
|
|||
var _ marshal.Marshallable = (*UContext64)(nil)
|
||||
var _ marshal.Marshallable = (*linux.SignalSet)(nil)
|
||||
|
||||
// SizeBytes implements marshal.Marshallable.SizeBytes.
|
||||
func (u *UContext64) SizeBytes() int {
|
||||
return 16 +
|
||||
(*SignalStack)(nil).SizeBytes() +
|
||||
(*SignalContext64)(nil).SizeBytes() +
|
||||
(*linux.SignalSet)(nil).SizeBytes()
|
||||
}
|
||||
|
||||
// MarshalBytes implements marshal.Marshallable.MarshalBytes.
|
||||
func (u *UContext64) MarshalBytes(dst []byte) {
|
||||
usermem.ByteOrder.PutUint64(dst[:8], uint64(u.Flags))
|
||||
dst = dst[8:]
|
||||
usermem.ByteOrder.PutUint64(dst[:8], uint64(u.Link))
|
||||
dst = dst[8:]
|
||||
u.Stack.MarshalBytes(dst[:u.Stack.SizeBytes()])
|
||||
dst = dst[u.Stack.SizeBytes():]
|
||||
u.MContext.MarshalBytes(dst[:u.MContext.SizeBytes()])
|
||||
dst = dst[u.MContext.SizeBytes():]
|
||||
u.Sigset.MarshalBytes(dst[:u.Sigset.SizeBytes()])
|
||||
dst = dst[u.Sigset.SizeBytes():]
|
||||
}
|
||||
|
||||
// UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes.
|
||||
func (u *UContext64) UnmarshalBytes(src []byte) {
|
||||
u.Flags = uint64(usermem.ByteOrder.Uint64(src[:8]))
|
||||
src = src[8:]
|
||||
u.Link = uint64(usermem.ByteOrder.Uint64(src[:8]))
|
||||
src = src[8:]
|
||||
u.Stack.UnmarshalBytes(src[:u.Stack.SizeBytes()])
|
||||
src = src[u.Stack.SizeBytes():]
|
||||
u.MContext.UnmarshalBytes(src[:u.MContext.SizeBytes()])
|
||||
src = src[u.MContext.SizeBytes():]
|
||||
u.Sigset.UnmarshalBytes(src[:u.Sigset.SizeBytes()])
|
||||
src = src[u.Sigset.SizeBytes():]
|
||||
}
|
||||
|
||||
// Packed implements marshal.Marshallable.Packed.
|
||||
//go:nosplit
|
||||
func (u *UContext64) Packed() bool {
|
||||
return u.MContext.Packed() && u.Sigset.Packed() && u.Stack.Packed()
|
||||
}
|
||||
|
||||
// MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe.
|
||||
func (u *UContext64) MarshalUnsafe(dst []byte) {
|
||||
if u.MContext.Packed() && u.Sigset.Packed() && u.Stack.Packed() {
|
||||
safecopy.CopyIn(dst, unsafe.Pointer(u))
|
||||
} else {
|
||||
// Type UContext64 doesn't have a packed layout in memory, fallback to MarshalBytes.
|
||||
u.MarshalBytes(dst)
|
||||
}
|
||||
}
|
||||
|
||||
// UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe.
|
||||
func (u *UContext64) UnmarshalUnsafe(src []byte) {
|
||||
if u.MContext.Packed() && u.Sigset.Packed() && u.Stack.Packed() {
|
||||
safecopy.CopyOut(unsafe.Pointer(u), src)
|
||||
} else {
|
||||
// Type UContext64 doesn't have a packed layout in memory, fallback to UnmarshalBytes.
|
||||
u.UnmarshalBytes(src)
|
||||
}
|
||||
}
|
||||
|
||||
// CopyOutN implements marshal.Marshallable.CopyOutN.
|
||||
//go:nosplit
|
||||
func (u *UContext64) CopyOutN(cc marshal.CopyContext, addr usermem.Addr, limit int) (int, error) {
|
||||
if !u.MContext.Packed() && u.Sigset.Packed() && u.Stack.Packed() {
|
||||
// Type UContext64 doesn't have a packed layout in memory, fall back to MarshalBytes.
|
||||
buf := cc.CopyScratchBuffer(u.SizeBytes()) // escapes: okay.
|
||||
u.MarshalBytes(buf) // escapes: fallback.
|
||||
return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay.
|
||||
}
|
||||
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(u)))
|
||||
hdr.Len = u.SizeBytes()
|
||||
hdr.Cap = u.SizeBytes()
|
||||
|
||||
length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that u
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(u) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// CopyOut implements marshal.Marshallable.CopyOut.
|
||||
//go:nosplit
|
||||
func (u *UContext64) CopyOut(cc marshal.CopyContext, addr usermem.Addr) (int, error) {
|
||||
return u.CopyOutN(cc, addr, u.SizeBytes())
|
||||
}
|
||||
|
||||
// CopyIn implements marshal.Marshallable.CopyIn.
|
||||
//go:nosplit
|
||||
func (u *UContext64) CopyIn(cc marshal.CopyContext, addr usermem.Addr) (int, error) {
|
||||
if !u.MContext.Packed() && u.Sigset.Packed() && u.Stack.Packed() {
|
||||
// Type UContext64 doesn't have a packed layout in memory, fall back to UnmarshalBytes.
|
||||
buf := cc.CopyScratchBuffer(u.SizeBytes()) // escapes: okay.
|
||||
length, err := cc.CopyInBytes(addr, buf) // escapes: okay.
|
||||
// Unmarshal unconditionally. If we had a short copy-in, this results in a
|
||||
// partially unmarshalled struct.
|
||||
u.UnmarshalBytes(buf) // escapes: fallback.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(u)))
|
||||
hdr.Len = u.SizeBytes()
|
||||
hdr.Cap = u.SizeBytes()
|
||||
|
||||
length, err := cc.CopyInBytes(addr, buf) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that u
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(u) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// WriteTo implements io.WriterTo.WriteTo.
|
||||
func (u *UContext64) WriteTo(writer io.Writer) (int64, error) {
|
||||
if !u.MContext.Packed() && u.Sigset.Packed() && u.Stack.Packed() {
|
||||
// Type UContext64 doesn't have a packed layout in memory, fall back to MarshalBytes.
|
||||
buf := make([]byte, u.SizeBytes())
|
||||
u.MarshalBytes(buf)
|
||||
length, err := writer.Write(buf)
|
||||
return int64(length), err
|
||||
}
|
||||
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(u)))
|
||||
hdr.Len = u.SizeBytes()
|
||||
hdr.Cap = u.SizeBytes()
|
||||
|
||||
length, err := writer.Write(buf)
|
||||
// Since we bypassed the compiler's escape analysis, indicate that u
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(u) // escapes: replaced by intrinsic.
|
||||
return int64(length), err
|
||||
}
|
||||
|
||||
// SizeBytes implements marshal.Marshallable.SizeBytes.
|
||||
func (s *SignalContext64) SizeBytes() int {
|
||||
return 184 +
|
||||
|
@ -405,3 +262,146 @@ func (s *SignalContext64) WriteTo(writer io.Writer) (int64, error) {
|
|||
return int64(length), err
|
||||
}
|
||||
|
||||
// SizeBytes implements marshal.Marshallable.SizeBytes.
|
||||
func (u *UContext64) SizeBytes() int {
|
||||
return 16 +
|
||||
(*SignalStack)(nil).SizeBytes() +
|
||||
(*SignalContext64)(nil).SizeBytes() +
|
||||
(*linux.SignalSet)(nil).SizeBytes()
|
||||
}
|
||||
|
||||
// MarshalBytes implements marshal.Marshallable.MarshalBytes.
|
||||
func (u *UContext64) MarshalBytes(dst []byte) {
|
||||
usermem.ByteOrder.PutUint64(dst[:8], uint64(u.Flags))
|
||||
dst = dst[8:]
|
||||
usermem.ByteOrder.PutUint64(dst[:8], uint64(u.Link))
|
||||
dst = dst[8:]
|
||||
u.Stack.MarshalBytes(dst[:u.Stack.SizeBytes()])
|
||||
dst = dst[u.Stack.SizeBytes():]
|
||||
u.MContext.MarshalBytes(dst[:u.MContext.SizeBytes()])
|
||||
dst = dst[u.MContext.SizeBytes():]
|
||||
u.Sigset.MarshalBytes(dst[:u.Sigset.SizeBytes()])
|
||||
dst = dst[u.Sigset.SizeBytes():]
|
||||
}
|
||||
|
||||
// UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes.
|
||||
func (u *UContext64) UnmarshalBytes(src []byte) {
|
||||
u.Flags = uint64(usermem.ByteOrder.Uint64(src[:8]))
|
||||
src = src[8:]
|
||||
u.Link = uint64(usermem.ByteOrder.Uint64(src[:8]))
|
||||
src = src[8:]
|
||||
u.Stack.UnmarshalBytes(src[:u.Stack.SizeBytes()])
|
||||
src = src[u.Stack.SizeBytes():]
|
||||
u.MContext.UnmarshalBytes(src[:u.MContext.SizeBytes()])
|
||||
src = src[u.MContext.SizeBytes():]
|
||||
u.Sigset.UnmarshalBytes(src[:u.Sigset.SizeBytes()])
|
||||
src = src[u.Sigset.SizeBytes():]
|
||||
}
|
||||
|
||||
// Packed implements marshal.Marshallable.Packed.
|
||||
//go:nosplit
|
||||
func (u *UContext64) Packed() bool {
|
||||
return u.MContext.Packed() && u.Sigset.Packed() && u.Stack.Packed()
|
||||
}
|
||||
|
||||
// MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe.
|
||||
func (u *UContext64) MarshalUnsafe(dst []byte) {
|
||||
if u.MContext.Packed() && u.Sigset.Packed() && u.Stack.Packed() {
|
||||
safecopy.CopyIn(dst, unsafe.Pointer(u))
|
||||
} else {
|
||||
// Type UContext64 doesn't have a packed layout in memory, fallback to MarshalBytes.
|
||||
u.MarshalBytes(dst)
|
||||
}
|
||||
}
|
||||
|
||||
// UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe.
|
||||
func (u *UContext64) UnmarshalUnsafe(src []byte) {
|
||||
if u.MContext.Packed() && u.Sigset.Packed() && u.Stack.Packed() {
|
||||
safecopy.CopyOut(unsafe.Pointer(u), src)
|
||||
} else {
|
||||
// Type UContext64 doesn't have a packed layout in memory, fallback to UnmarshalBytes.
|
||||
u.UnmarshalBytes(src)
|
||||
}
|
||||
}
|
||||
|
||||
// CopyOutN implements marshal.Marshallable.CopyOutN.
|
||||
//go:nosplit
|
||||
func (u *UContext64) CopyOutN(cc marshal.CopyContext, addr usermem.Addr, limit int) (int, error) {
|
||||
if !u.MContext.Packed() && u.Sigset.Packed() && u.Stack.Packed() {
|
||||
// Type UContext64 doesn't have a packed layout in memory, fall back to MarshalBytes.
|
||||
buf := cc.CopyScratchBuffer(u.SizeBytes()) // escapes: okay.
|
||||
u.MarshalBytes(buf) // escapes: fallback.
|
||||
return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay.
|
||||
}
|
||||
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(u)))
|
||||
hdr.Len = u.SizeBytes()
|
||||
hdr.Cap = u.SizeBytes()
|
||||
|
||||
length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that u
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(u) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// CopyOut implements marshal.Marshallable.CopyOut.
|
||||
//go:nosplit
|
||||
func (u *UContext64) CopyOut(cc marshal.CopyContext, addr usermem.Addr) (int, error) {
|
||||
return u.CopyOutN(cc, addr, u.SizeBytes())
|
||||
}
|
||||
|
||||
// CopyIn implements marshal.Marshallable.CopyIn.
|
||||
//go:nosplit
|
||||
func (u *UContext64) CopyIn(cc marshal.CopyContext, addr usermem.Addr) (int, error) {
|
||||
if !u.MContext.Packed() && u.Sigset.Packed() && u.Stack.Packed() {
|
||||
// Type UContext64 doesn't have a packed layout in memory, fall back to UnmarshalBytes.
|
||||
buf := cc.CopyScratchBuffer(u.SizeBytes()) // escapes: okay.
|
||||
length, err := cc.CopyInBytes(addr, buf) // escapes: okay.
|
||||
// Unmarshal unconditionally. If we had a short copy-in, this results in a
|
||||
// partially unmarshalled struct.
|
||||
u.UnmarshalBytes(buf) // escapes: fallback.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(u)))
|
||||
hdr.Len = u.SizeBytes()
|
||||
hdr.Cap = u.SizeBytes()
|
||||
|
||||
length, err := cc.CopyInBytes(addr, buf) // escapes: okay.
|
||||
// Since we bypassed the compiler's escape analysis, indicate that u
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(u) // escapes: replaced by intrinsic.
|
||||
return length, err
|
||||
}
|
||||
|
||||
// WriteTo implements io.WriterTo.WriteTo.
|
||||
func (u *UContext64) WriteTo(writer io.Writer) (int64, error) {
|
||||
if !u.MContext.Packed() && u.Sigset.Packed() && u.Stack.Packed() {
|
||||
// Type UContext64 doesn't have a packed layout in memory, fall back to MarshalBytes.
|
||||
buf := make([]byte, u.SizeBytes())
|
||||
u.MarshalBytes(buf)
|
||||
length, err := writer.Write(buf)
|
||||
return int64(length), err
|
||||
}
|
||||
|
||||
// Construct a slice backed by dst's underlying memory.
|
||||
var buf []byte
|
||||
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
|
||||
hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(u)))
|
||||
hdr.Len = u.SizeBytes()
|
||||
hdr.Cap = u.SizeBytes()
|
||||
|
||||
length, err := writer.Write(buf)
|
||||
// Since we bypassed the compiler's escape analysis, indicate that u
|
||||
// must live until the use above.
|
||||
runtime.KeepAlive(u) // escapes: replaced by intrinsic.
|
||||
return int64(length), err
|
||||
}
|
||||
|
||||
|
|
|
@ -3,95 +3,95 @@ package injector
|
|||
// This file was generated using openssl by the gencerts.sh script.
|
||||
|
||||
var caKey = []byte(`-----BEGIN RSA PRIVATE KEY-----
|
||||
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
|
||||
-----END RSA PRIVATE KEY-----`)
|
||||
|
||||
var caCert = []byte(`-----BEGIN CERTIFICATE-----
|
||||
MIICqzCCAZMCFHgGjzg1vWf8n63+HsgXPcjwXRUWMA0GCSqGSIb3DQEBCwUAMBEx
|
||||
DzANBgNVBAMMBmUyZV9jYTAgFw0yMDEyMzAwMDMwMjJaGA8yMjk0MTAxNTAwMzAy
|
||||
MlowETEPMA0GA1UEAwwGZTJlX2NhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
||||
CgKCAQEAoUexaE6JbSu7O1Drvsj2Lt0fGtk/exJhdoKlsVQ414dUZ9JSYJKjkET9
|
||||
h5iWQUKd/t4hZRFQyH6tzfbntiMwzM+eryPNwIQBryhU0EqKB2NvywL6ozcsfuPI
|
||||
738IdOUGNHuFySFwyWYuHZMj8GuJ2XjqtElpqhtH/Hrbf0/qOnDf3v4trMORT5D/
|
||||
pRGzrZtxphRJ8rWmTz7Ce81TA7PkLy8Et8UtO9cXc8g9d/lCSe9x0BdnsWYm1bdB
|
||||
935i3ZBoasfHPRs+6VjQ6pfzrJ0+QLXkgxMzhfbBHgSGHe6I6uIDBimW4qtyL1kp
|
||||
vqBJbtlkInjf0oXdM1WCCFZLhlnyNQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAt
|
||||
4bxA9LhlGmsB6mxL/Qmh5WDe3eT/6Ar8KfwYf/bQShnn338Rb0nP1L7NZuyJWKei
|
||||
gClRmZkZSwspzYr9POaqtysxzC/HV1/BLHlvWOKd4fvDcjLbqiQB8afNwT6BJaxQ
|
||||
2C8damKB1cl5F0SR1Bc683mV+fbbSs2jftX92ZoKJr55X+BCRfyEKowFjw8o98K7
|
||||
A8MokfwqRfWOUd1nU9KRXfal6y3KyuK+lKaQtveyqMNBty/Y7epjAMJTxDtauAqz
|
||||
gWOOm3Fi1LqCmMzmEblMKsRPYXvJQ3CMKb3qX0ajw5MG9PUBp1AATJ6a+VZNp94x
|
||||
lX44o4bU0e4m/I6DZmnF
|
||||
MIICqzCCAZMCFHOPDPhe8VHPQBU9eZ4k3biL33tvMA0GCSqGSIb3DQEBCwUAMBEx
|
||||
DzANBgNVBAMMBmUyZV9jYTAgFw0yMDEyMzAwMTQ1NTlaGA8yMjk0MTAxNTAxNDU1
|
||||
OVowETEPMA0GA1UEAwwGZTJlX2NhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
||||
CgKCAQEAtUYj/tDPDDHTlSJpZLIjZ5dUZ4MD3IdwBJLUwTXdDr0TWVhYMX7FSJVe
|
||||
KW+hGpx1xZ1R+TdCwzSyfoFFCzttcqnKJ1Kl+FYDBMsIDFZw4BiAAPVKsviCMYVt
|
||||
gR+YU4Z1WzudCX8RUbxK5ueifXSf8GbRteu6mCv2uMuDrA+XfZnNWyr+6sgU1kzT
|
||||
AUgUMt6VKR069ayClv8P42VRDb9Rw2Hma5x4AnMCF2WaxBN8kLRpqHRdit80d5oi
|
||||
dY6xpxcBPOismo76U4RpIXtCEBvgvZInhW3qz2rxFYG0PJnw0ovOvCdPfcz5sktr
|
||||
erreet3sDiTwU6TM1KSJX+uGmnetnwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAm
|
||||
52DD59yJDsbzK2dTTnBYgUtXkYeEvnQmcQ9nY2209MAP3u8nFk/SbeRiRND4ZH44
|
||||
QluVyAB64sLEDgL09+Ag5oKo0HaMfbFRFl9zqu/9e5ew6CyIwCsAOSGe0UMn6Wwk
|
||||
xmnoCs7N/rMllPSfVQY2Se7VDwD/2qJZwAARlfhMUGDrYNFuEYg9LWCTmIljmmjw
|
||||
uKeRvG0goezmkkDKbuFiEM2uT/R0FpTiEn2qaYvDNXKVGLK9JhUeScbThL42jV9m
|
||||
Jq86HNWl0lQvmq3UElmal8EAW+fupyFcNWamlNaRLNIEg0BYyS+Bc14cGQ4e20hP
|
||||
ANxAnoVTDxatLx6IgF+l
|
||||
-----END CERTIFICATE-----`)
|
||||
|
||||
var serverKey = []byte(`-----BEGIN RSA PRIVATE KEY-----
|
||||
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
|
||||
-----END RSA PRIVATE KEY-----`)
|
||||
|
||||
var serverCert = []byte(`-----BEGIN CERTIFICATE-----
|
||||
MIIDDzCCAfegAwIBAgIUUY1N7piEKpg2L6XCKttKq2ZE8LYwDQYJKoZIhvcNAQEL
|
||||
BQAwETEPMA0GA1UEAwwGZTJlX2NhMCAXDTIwMTIzMDAwMzAyMloYDzIyOTQxMDE1
|
||||
MDAzMDIyWjA1MTMwMQYDVQQDDCpndmlzb3ItaW5qZWN0aW9uLWFkbWlzc2lvbi13
|
||||
ZWJob29rLmUyZS5zdmMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ
|
||||
clJjRwmgWJWZXsayt3p23hzCIfQUcL5t65FSb/y4G5j07ElL7FYxHY5xsm0rRLNj
|
||||
XQSlbVSRSLP+oTPAFwS42rAJpU7ZWXcqNUptGvbEjtoXkVgFo4flhJZXZOtuqcbS
|
||||
CMD1RHIwDg0eCuuuI3Zv9LZYdvAvpIhfpj6coBz/4p7/NY0i3npV3ZuAqhlLL0Fs
|
||||
RqNIu3+6u3k0FMIgT5wfZo2qMeW9kxdIO6xtjVT40b5QBr+xmS9nCit0UKM8/H2z
|
||||
Ut46E2+WIHQihIsCiaxDUIXEBsI2zG9a8SGuO7pttS0MFk7oUmVAlzfseBMT9xZj
|
||||
lqD3bo0+hTvSSkPMV1NXAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgXg
|
||||
MIIDDzCCAfegAwIBAgIUYw+kvxKk5J0Q1nAtF7WFIUNuxvQwDQYJKoZIhvcNAQEL
|
||||
BQAwETEPMA0GA1UEAwwGZTJlX2NhMCAXDTIwMTIzMDAxNDYwMFoYDzIyOTQxMDE1
|
||||
MDE0NjAwWjA1MTMwMQYDVQQDDCpndmlzb3ItaW5qZWN0aW9uLWFkbWlzc2lvbi13
|
||||
ZWJob29rLmUyZS5zdmMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+
|
||||
PJbTqDbwDUlquKfk5IbjBHS69S14Tf5lOBrB7Mm92LhPhFbNzPVMq+AcGDjMjbRK
|
||||
qMtLybzl8hauYvTGdFh5BH1wrlL0MW+NtJtiYf3z9Z4OxUWJjcbg2ecBkNv0d6Bd
|
||||
1ktaIBcATriZWEIU/DWhuxFg9VM35ls2ndQQsHkcLZissJFdc8uHlgRE+k8KY7X0
|
||||
VEIprK6wfPRi4AZ/35bujPaBKaeWDKYmg7aYOqA3HDW4zbTaiAHT5BXamGkZAa9W
|
||||
HpmyKXAswUTB20AmfffUSayWRtd3FE53WDfwREU/S2wByVMy465+FoVTs+QfKB0K
|
||||
BSXGYes48a3ezBVduYE7AgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgXg
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATANBgkqhkiG9w0BAQsFAAOC
|
||||
AQEAFg24NLJzPx+p7Cmh+u4aJPpLT1uVfU2bTesyxiqWzax98rBdN6ghoOiYOjuI
|
||||
9wUtMzDhcIENk88MdR5KlwW+2I7swkFIrdNcmy4WCCBXGNiQwvdasD0xCWNAk08Y
|
||||
XbaixJ9LdAWDGoYQyXs/vQrixzNpKMM8nQC5sv89CL2uaEYMgYfLP3G3ZwMxYHM5
|
||||
0IU5ohuJipXGY6LurZrtiwzquDlR8bN8a/lxWG7U5ErTEry064Hn3MomJHj8hLNR
|
||||
yAYsZXoi4F0g9zokz9HTYVwVS+qB+cw1Rvxa36ZXXawF6k7XVxYPIm5yLWL6BujC
|
||||
6NA/HG/K1p0OQu33417MGWMZeg==
|
||||
AQEAerR4SLGytdufaftX8wXhp5/8TN5uwsrfifYbYYD7eP1uGxbGHEmsDNmQuPxh
|
||||
PAs8emeTlxDDV6oJI8BtjXT0MW4YYDEFVnPynrG9Mu29Qju7lqX+wWUTb37dLmPo
|
||||
ISZBi9CvF3a6dCMytOwx7UX2lHn7PuhhN6P1x3IDO3798ED/c42p9m0s+GDHifxS
|
||||
NSD27id1LTx3peqJinacRAr1HMHgeoH6Si/HWoKOaapI7rVjpeiK5legQzcfq68r
|
||||
Sq3c+NsxCRVrhsj3oyUuPFDuE340NG5qGY4SCSAd/4J4LNScL/uvP4SYmAdrp+nC
|
||||
HEP3jklV4cN/EZwyjhQX/lHV/w==
|
||||
-----END CERTIFICATE-----`)
|
||||
|
|
Loading…
Reference in New Issue