mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-22 15:07:43 +08:00
cdb4231369
(pthread_attr_setguardsize): Export. (pthread_attr_setstack): Export. (pthread_attr_setstackaddr): Export. * init.cc (dll_entry): Remove wow64_test_stack_marker. Check for unusual stack address by testing stack addresses from current TEB. Check validity of _my_tls by testing if it's within the stack as given in current TEB. * miscfuncs.cc (struct thread_wrapper_arg): New structure used to push all required information to thread_wrapper function. (thread_wrapper): Wrapper function for actual thread function. If an application stack has been given, change %ebp and %esp so that the thread function runs on that stack. If the thread has been created by CygwinCreateThread, set up the POSIX guard pages if necessary. (CygwinCreateThread): New function. * miscfuncs.h (CygwinCreateThread): Declare. * ntdll.h (struct _TEB): Define all members up to Peb. * posix.sgml (std-susv4): Move pthread_attr_getguardsize, pthread_attr_setguardsize and pthread_attr_setstack here. (std-deprec): Add pthread_attr_setstackaddr. * sysconf.cc (sca): Set _SC_THREAD_ATTR_STACKADDR to _POSIX_THREAD_ATTR_STACKADDR. * thread.cc (pthread::precreate): Copy pthread_attr stackaddr and guardsize members. (pthread::create): Call CygwinCreateThread. (pthread_attr::pthread_attr): Initialize guardsize. (pthread_attr_setstack): New function. (pthread_attr_setstackaddr): New function. (pthread_attr_setguardsize): New function. (pthread_attr_getguardsize): New function. (pthread_getattr_np): Copy attr.guardsize. * thread.h (pthread_attr): Add member guardsize. * include/pthread.h (pthread_attr_getguardsize): Declare. (pthread_attr_setguardsize): Declare. * include/cygwin/version.h: Bump API minor number.
49 lines
1.6 KiB
C
49 lines
1.6 KiB
C
/* miscfuncs.h: main Cygwin header file.
|
|
|
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
|
2005, 2006, 2007, 2008, 2009, 2010, 2011 Red Hat, Inc.
|
|
|
|
This file is part of Cygwin.
|
|
|
|
This software is a copyrighted work licensed under the terms of the
|
|
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
|
|
details. */
|
|
|
|
#ifndef _MISCFUNCS_H
|
|
#define _MISCFUNCS_H
|
|
int winprio_to_nice (DWORD) __attribute__ ((regparm (1)));
|
|
DWORD nice_to_winprio (int &) __attribute__ ((regparm (1)));
|
|
|
|
bool __stdcall create_pipe (PHANDLE, PHANDLE, LPSECURITY_ATTRIBUTES, DWORD)
|
|
__attribute__ ((regparm (3)));
|
|
#define CreatePipe create_pipe
|
|
|
|
extern "C" void yield ();
|
|
|
|
void backslashify (const char *, char *, bool);
|
|
void slashify (const char *, char *, bool);
|
|
#define isslash(c) ((c) == '/')
|
|
|
|
extern void transform_chars (PWCHAR, PWCHAR);
|
|
inline void
|
|
transform_chars (PUNICODE_STRING upath, USHORT start_idx)
|
|
{
|
|
transform_chars (upath->Buffer + start_idx,
|
|
upath->Buffer + upath->Length / sizeof (WCHAR) - 1);
|
|
}
|
|
|
|
/* Memory checking */
|
|
int __stdcall check_invalid_virtual_addr (const void *s, unsigned sz) __attribute__ ((regparm(2)));
|
|
|
|
ssize_t check_iovec (const struct iovec *, int, bool) __attribute__ ((regparm(3)));
|
|
#define check_iovec_for_read(a, b) check_iovec ((a), (b), false)
|
|
#define check_iovec_for_write(a, b) check_iovec ((a), (b), true)
|
|
|
|
extern "C" HANDLE WINAPI CygwinCreateThread (LPTHREAD_START_ROUTINE thread_func,
|
|
PVOID thread_arg, PVOID stackaddr,
|
|
ULONG stacksize, ULONG guardsize,
|
|
DWORD creation_flags,
|
|
LPDWORD thread_id);
|
|
|
|
#endif /*_MISCFUNCS_H*/
|