diff options
Diffstat (limited to 'winsup/cygwin/cygtls.h')
-rw-r--r-- | winsup/cygwin/cygtls.h | 275 |
1 files changed, 0 insertions, 275 deletions
diff --git a/winsup/cygwin/cygtls.h b/winsup/cygwin/cygtls.h deleted file mode 100644 index 008de05bb..000000000 --- a/winsup/cygwin/cygtls.h +++ /dev/null @@ -1,275 +0,0 @@ -/* cygtls.h - - Copyright 2003, 2004, 2005 Red Hat, Inc. - -This software is a copyrighted work licensed under the terms of the -Cygwin license. Please consult the file "CYGWIN_LICENSE" for -details. */ - -#ifndef _CYGTLS_H -#define _CYGTLS_H - -#include <signal.h> -#include <pwd.h> -#include <grp.h> -#include <sys/time.h> -#define _NOMNTENT_FUNCS -#include <mntent.h> -#undef _NOMNTENT_FUNCS -#include <setjmp.h> - -#ifndef _WINSOCK_H -/* Stupid hack: Including winsock.h explicitly causes too many problems. */ -struct sockaddr_in -{ - short sin_family; - u_short sin_port; - struct in_addr - { - union - { - struct - { - u_char s_b1, s_b2, s_b3, s_b4; - } S_un_b; - struct - { - u_short s_w1, s_w2; - } S_un_w; - u_long S_addr; - } S_un; - }; - struct in_addr sin_addr; - char sin_zero[8]; -}; -typedef unsigned int SOCKET; -#endif - -#define CYGTLS_INITIALIZED 0x43227 -#define CYGTLS_EXCEPTION (0x43227 + true) -#define CYGTLSMAGIC "D0Ub313v31nm&G1c?"; - -#ifndef CYG_MAX_PATH -# define CYG_MAX_PATH 260 -#endif - -#ifndef UNLEN -# define UNLEN 256 -#endif - -#define TLS_STACK_SIZE 256 - -#include "cygthread.h" - -#pragma pack(push,4) -struct _local_storage -{ - /* - Needed for the group functions - */ - struct __group16 grp; - char *namearray[2]; - int grp_pos; - - /* console.cc */ - unsigned rarg; - - /* dlfcn.cc */ - int dl_error; - char dl_buffer[256]; - - /* passwd.cc */ - struct passwd res; - char pass[_PASSWORD_LEN]; - int pw_pos; - - /* path.cc */ - struct mntent mntbuf; - int iteration; - unsigned available_drives; - char mnt_type[80]; - char mnt_opts[80]; - char mnt_fsname[CYG_MAX_PATH]; - char mnt_dir[CYG_MAX_PATH]; - - /* select.cc */ - SOCKET exitsock; - struct sockaddr_in exitsock_sin; - - /* strerror */ - char strerror_buf[sizeof ("Unknown error 4294967295")]; - - /* sysloc.cc */ - char *process_ident; // note: malloced - int process_logopt; - int process_facility; - int process_logmask; - - /* times.cc */ - char timezone_buf[20]; - struct tm _localtime_buf; - - /* uinfo.cc */ - char username[UNLEN + 1]; - - /* net.cc */ - char *ntoa_buf; // note: malloced - struct protoent *protoent_buf; // note: malloced - struct servent *servent_buf; // note: malloced - struct hostent *hostent_buf; // note: malloced - char signamebuf[sizeof ("Unknown signal 4294967295 ")]; - - /* cygthread.cc */ - char unknown_thread_name[30]; - - /* syscalls.cc */ - int setmode_file; - int setmode_mode; -}; - -typedef struct struct_waitq -{ - int pid; - int options; - int status; - HANDLE ev; - void *rusage; /* pointer to potential rusage */ - struct struct_waitq *next; - HANDLE thread_ev; -} waitq; - -typedef struct -{ - void *_myfault; - int _myfault_errno; -} san; - -/* Changes to the below structure may require acompanying changes to the very - simple parser in the perl script 'gentls_offsets' (<<-- start parsing here). - The union in this structure is used to force alignment between the version - of the compiler used to generate tlsoffsets.h and the cygwin cross compiler. -*/ - -/*gentls_offsets*/ -#include "cygerrno.h" - -extern "C" int __sjfault (jmp_buf); -extern "C" int __ljfault (jmp_buf, int); - -/*gentls_offsets*/ - -typedef __uint32_t __stack_t; -struct _cygtls -{ - void (*func) /*gentls_offsets*/(int)/*gentls_offsets*/; - int saved_errno; - int sa_flags; - sigset_t oldmask; - sigset_t deltamask; - HANDLE event; - int *errno_addr; - unsigned initialized; - sigset_t sigmask; - sigset_t sigwait_mask; - siginfo_t *sigwait_info; - unsigned threadkill; - siginfo_t infodata; - struct pthread *tid; - union - { - struct _reent local_clib; - char __dontuse[8 * ((sizeof(struct _reent) + 4) / 8)]; - }; - struct _local_storage locals; - class cygthread *_ctinfo; - san andreas; - waitq wq; - struct _cygtls *prev, *next; - __stack_t *stackptr; - int sig; - unsigned incyg; - unsigned spinning; - unsigned stacklock; - __stack_t stack[TLS_STACK_SIZE]; - unsigned padding[0]; - - /*gentls_offsets*/ - static CRITICAL_SECTION protect_linked_list; - static void init (); - void init_thread (void *, DWORD (*) (void *, void *)); - static void call (DWORD (*) (void *, void *), void *); - static void call2 (DWORD (*) (void *, void *), void *, void *) __attribute__ ((regparm (3))); - static struct _cygtls *find_tls (int sig); - void remove (DWORD); - void push (__stack_t, bool) __attribute__ ((regparm (3))); - __stack_t pop () __attribute__ ((regparm (1))); - bool isinitialized () const {return initialized == CYGTLS_INITIALIZED || initialized == CYGTLS_EXCEPTION;} - bool in_exception () const {return initialized == CYGTLS_EXCEPTION;} - void set_state (bool); - void reset_exception (); - bool interrupt_now (CONTEXT *, int, void *, struct sigaction&) - __attribute__((regparm(3))); - void __stdcall interrupt_setup (int sig, void *handler, - struct sigaction& siga) - __attribute__((regparm(3))); - void init_threadlist_exceptions (struct _exception_list *); -#ifdef _THREAD_H - operator HANDLE () const {return tid->win32_obj_id;} -#endif - void set_siginfo (struct sigpacket *) __attribute__ ((regparm (3))); - void set_threadkill () {threadkill = true;} - void reset_threadkill () {threadkill = false;} - int call_signal_handler () __attribute__ ((regparm (1))); - void remove_wq (DWORD) __attribute__ ((regparm (1))); - void fixup_after_fork () __attribute__ ((regparm (1))); - void lock () __attribute__ ((regparm (1))); - void unlock () __attribute__ ((regparm (1))); - bool locked () __attribute__ ((regparm (1))); - void*& fault_guarded () {return andreas._myfault;} - void return_from_fault () - { - if (andreas._myfault_errno) - set_errno (andreas._myfault_errno); - __ljfault ((int *) andreas._myfault, 1); - } - int setup_fault (jmp_buf j, san& old_j, int myerrno) __attribute__ ((always_inline)) - { - old_j._myfault = andreas._myfault; - old_j._myfault_errno = andreas._myfault_errno; - andreas._myfault = (void *) j; - andreas._myfault_errno = myerrno; - return __sjfault (j); - } - void reset_fault (san& old_j) __attribute__ ((always_inline)) - { - andreas._myfault = old_j._myfault; - andreas._myfault_errno = old_j._myfault_errno; - } - /*gentls_offsets*/ -}; -#pragma pack(pop) - -extern char *_tlsbase __asm__ ("%fs:4"); -extern char *_tlstop __asm__ ("%fs:8"); -#define _my_tls (((_cygtls *) _tlsbase)[-1]) -extern _cygtls *_main_tls; -extern _cygtls *_sig_tls; - -/*gentls_offsets*/ -class myfault -{ - jmp_buf buf; - san sebastian; -public: - ~myfault () __attribute__ ((always_inline)) { _my_tls.reset_fault (sebastian); } - inline int faulted (int myerrno = 0) __attribute__ ((always_inline)) - { - return _my_tls.setup_fault (buf, sebastian, myerrno); - } -}; -/*gentls_offsets*/ - -#define __getreent() (&_my_tls.local_clib) - -const int CYGTLS_PADSIZE = (((char *) _main_tls->padding) - ((char *) _main_tls)); -#endif /*_CYGTLS_H*/ |