diff options
Diffstat (limited to '')
-rw-r--r-- | go-patches/0002-syscall-add-support-for-proc-thread-attribute-lists.patch | 158 |
1 files changed, 0 insertions, 158 deletions
diff --git a/go-patches/0002-syscall-add-support-for-proc-thread-attribute-lists.patch b/go-patches/0002-syscall-add-support-for-proc-thread-attribute-lists.patch deleted file mode 100644 index f3e3a959..00000000 --- a/go-patches/0002-syscall-add-support-for-proc-thread-attribute-lists.patch +++ /dev/null @@ -1,158 +0,0 @@ -From ed7ed5c7b3ce4db8abd0219b12ff17ad9074f1cb Mon Sep 17 00:00:00 2001 -From: "Jason A. Donenfeld" <Jason@zx2c4.com> -Date: Sun, 31 Jan 2021 17:37:20 +0100 -Subject: [PATCH 2/6] syscall: add support for proc thread attribute lists - -This will allow us to pass additional attributes when starting -processes. - -Updates #44011. - -Change-Id: I4af365c5544a6d421830f247593ec970200e5e03 ---- - src/syscall/syscall_windows.go | 28 ++++++++++++++++++++++++++++ - src/syscall/types_windows.go | 14 ++++++++++++++ - src/syscall/zsyscall_windows.go | 24 ++++++++++++++++++++++++ - 3 files changed, 66 insertions(+) - -diff --git a/src/syscall/syscall_windows.go b/src/syscall/syscall_windows.go -index ba69133d81..d892cc110d 100644 ---- a/src/syscall/syscall_windows.go -+++ b/src/syscall/syscall_windows.go -@@ -284,6 +284,9 @@ func NewCallbackCDecl(fn interface{}) uintptr { - // This function returns 1 byte BOOLEAN rather than the 4 byte BOOL. - //sys CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) [failretval&0xff==0] = CreateSymbolicLinkW - //sys CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) [failretval&0xff==0] = CreateHardLinkW -+//sys initializeProcThreadAttributeList(attrlist *_PROC_THREAD_ATTRIBUTE_LIST, attrcount uint32, flags uint32, size *uintptr) (err error) = InitializeProcThreadAttributeList -+//sys deleteProcThreadAttributeList(attrlist *_PROC_THREAD_ATTRIBUTE_LIST) = DeleteProcThreadAttributeList -+//sys updateProcThreadAttribute(attrlist *_PROC_THREAD_ATTRIBUTE_LIST, flags uint32, attr uintptr, value uintptr, size uintptr, prevvalue uintptr, returnedsize *uintptr) (err error) = UpdateProcThreadAttribute - - // syscall interface implementation for other packages - -@@ -1209,3 +1212,28 @@ func Readlink(path string, buf []byte) (n int, err error) { - - return n, nil - } -+ -+// newProcThreadAttributeList allocates new PROC_THREAD_ATTRIBUTE_LIST, with a have maximum of maxattrcount attributes. -+func newProcThreadAttributeList(maxattrcount uint32) (*_PROC_THREAD_ATTRIBUTE_LIST, error) { -+ var size uintptr -+ err := initializeProcThreadAttributeList(nil, maxattrcount, 0, &size) -+ if err != ERROR_INSUFFICIENT_BUFFER { -+ if err == nil { -+ return nil, errorspkg.New("InitializeProcThreadAttributeList returned no error") -+ } -+ return nil, err -+ } -+ al := (*_PROC_THREAD_ATTRIBUTE_LIST)(unsafe.Pointer(&make([]byte, size)[0])) -+ runtime.SetFinalizer(al, func(al *_PROC_THREAD_ATTRIBUTE_LIST) { -+ deleteProcThreadAttributeList(al) -+ }) -+ err = initializeProcThreadAttributeList(al, maxattrcount, 0, &size) -+ if err != nil { -+ return nil, err -+ } -+ return al, err -+} -+ -+func (al *_PROC_THREAD_ATTRIBUTE_LIST) Add(attribute uintptr, value unsafe.Pointer, size uintptr) error { -+ return updateProcThreadAttribute(al, 0, attribute, uintptr(value), size, 0, nil) -+} -diff --git a/src/syscall/types_windows.go b/src/syscall/types_windows.go -index 0349f3b180..59231bdb83 100644 ---- a/src/syscall/types_windows.go -+++ b/src/syscall/types_windows.go -@@ -482,6 +482,20 @@ type StartupInfo struct { - StdErr Handle - } - -+type _PROC_THREAD_ATTRIBUTE_LIST [1]byte -+ -+const ( -+ _PROC_THREAD_ATTRIBUTE_PARENT_PROCESS = 0x00020000 -+ _PROC_THREAD_ATTRIBUTE_HANDLE_LIST = 0x00020002 -+) -+ -+type _STARTUPINFOEXW struct { -+ StartupInfo -+ ProcThreadAttributeList *_PROC_THREAD_ATTRIBUTE_LIST -+} -+ -+const _EXTENDED_STARTUPINFO_PRESENT = 0x00080000 -+ - type ProcessInformation struct { - Process Handle - Thread Handle -diff --git a/src/syscall/zsyscall_windows.go b/src/syscall/zsyscall_windows.go -index 2166be595b..db9e6e10ea 100644 ---- a/src/syscall/zsyscall_windows.go -+++ b/src/syscall/zsyscall_windows.go -@@ -93,6 +93,7 @@ var ( - procCreateSymbolicLinkW = modkernel32.NewProc("CreateSymbolicLinkW") - procCreateToolhelp32Snapshot = modkernel32.NewProc("CreateToolhelp32Snapshot") - procDeleteFileW = modkernel32.NewProc("DeleteFileW") -+ procDeleteProcThreadAttributeList = modkernel32.NewProc("DeleteProcThreadAttributeList") - procDeviceIoControl = modkernel32.NewProc("DeviceIoControl") - procDuplicateHandle = modkernel32.NewProc("DuplicateHandle") - procExitProcess = modkernel32.NewProc("ExitProcess") -@@ -131,6 +132,7 @@ var ( - procGetTempPathW = modkernel32.NewProc("GetTempPathW") - procGetTimeZoneInformation = modkernel32.NewProc("GetTimeZoneInformation") - procGetVersion = modkernel32.NewProc("GetVersion") -+ procInitializeProcThreadAttributeList = modkernel32.NewProc("InitializeProcThreadAttributeList") - procLoadLibraryW = modkernel32.NewProc("LoadLibraryW") - procLocalFree = modkernel32.NewProc("LocalFree") - procMapViewOfFile = modkernel32.NewProc("MapViewOfFile") -@@ -153,6 +155,7 @@ var ( - procSetHandleInformation = modkernel32.NewProc("SetHandleInformation") - procTerminateProcess = modkernel32.NewProc("TerminateProcess") - procUnmapViewOfFile = modkernel32.NewProc("UnmapViewOfFile") -+ procUpdateProcThreadAttribute = modkernel32.NewProc("UpdateProcThreadAttribute") - procVirtualLock = modkernel32.NewProc("VirtualLock") - procVirtualUnlock = modkernel32.NewProc("VirtualUnlock") - procWaitForSingleObject = modkernel32.NewProc("WaitForSingleObject") -@@ -569,6 +572,11 @@ func DeleteFile(path *uint16) (err error) { - return - } - -+func deleteProcThreadAttributeList(attrlist *_PROC_THREAD_ATTRIBUTE_LIST) { -+ Syscall(procDeleteProcThreadAttributeList.Addr(), 1, uintptr(unsafe.Pointer(attrlist)), 0, 0) -+ return -+} -+ - func DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := Syscall9(procDeviceIoControl.Addr(), 8, uintptr(handle), uintptr(ioControlCode), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferSize), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferSize), uintptr(unsafe.Pointer(bytesReturned)), uintptr(unsafe.Pointer(overlapped)), 0) - if r1 == 0 { -@@ -897,6 +905,14 @@ func GetVersion() (ver uint32, err error) { - return - } - -+func initializeProcThreadAttributeList(attrlist *_PROC_THREAD_ATTRIBUTE_LIST, attrcount uint32, flags uint32, size *uintptr) (err error) { -+ r1, _, e1 := Syscall6(procInitializeProcThreadAttributeList.Addr(), 4, uintptr(unsafe.Pointer(attrlist)), uintptr(attrcount), uintptr(flags), uintptr(unsafe.Pointer(size)), 0, 0) -+ if r1 == 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ - func LoadLibrary(libname string) (handle Handle, err error) { - var _p0 *uint16 - _p0, err = UTF16PtrFromString(libname) -@@ -1099,6 +1115,14 @@ func UnmapViewOfFile(addr uintptr) (err error) { - return - } - -+func updateProcThreadAttribute(attrlist *_PROC_THREAD_ATTRIBUTE_LIST, flags uint32, attr uintptr, value uintptr, size uintptr, prevvalue uintptr, returnedsize *uintptr) (err error) { -+ r1, _, e1 := Syscall9(procUpdateProcThreadAttribute.Addr(), 7, uintptr(unsafe.Pointer(attrlist)), uintptr(flags), uintptr(attr), uintptr(value), uintptr(size), uintptr(prevvalue), uintptr(unsafe.Pointer(returnedsize)), 0, 0) -+ if r1 == 0 { -+ err = errnoErr(e1) -+ } -+ return -+} -+ - func VirtualLock(addr uintptr, length uintptr) (err error) { - r1, _, e1 := Syscall(procVirtualLock.Addr(), 2, uintptr(addr), uintptr(length), 0) - if r1 == 0 { --- -2.30.0 - |