mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-02-21 16:26:12 +08:00
* exceptions.cc (set_signal_mask): Redefine to not pass by address. Report
calculated mask in debugging output. * sigproc.h (set_signal_mask): Reflect above change in declaration. * path.cc (mount_item::build_win32): Take path apart before feeding it to fnmunge. Throughout, change use of _reent_winsup()-> to _my_tls.locals. instead. Throughout, remove obsolete MT_SAFE/_CYG_THREAD_FAILSAFE considerations. Througout, add cygtls.h include. * Makefile.in (DLL_OFILES): Add cygtls.o. Add some more objects to the -fomit-frame-pointer list. * acconfig.h: Remove obsolete settings. * config.h.in: Ditto. * bsdlib.cc: Add cygtls.h include. * configure.in: Remove --enable-extra-threadsafe-checking. * configure: Regenerate. * cygtls.h (_local_storage): New struct renamed from _winsup_t (sic). (_threadinfo:local_clib): Add new field. (_threadinfo::locals): Ditto. (_threadinfo::init_thread): Accept second _reent * argument. (_threadinfo::call): Define as regparm. (CYGTLS_PADSIZE): Remove unnecessary slop. (_getreent): Define as a macro. * thread.h: Remove _CYG_THREAD_FAILSAFE and MT_SAFE stuff. (_winsup_t): Move to cygtls.h. (ResourceLocks::ResourceLocks): Eliminate empty constructor. (MTinterface::reents): Eliminate. (MTinterface::thread_self_key): Eliminate. (MTinterface::MTinterface): Eliminate. * dcrt0.cc: Include stdio.h for _impure_ptr initialization. (do_global_ctors): Remove run_ctors_p (sic) considerations. Don't call atexit here. (__main): Initialize destructors for user here. (dll_crt0_1): Accept a dummy argument. Don't call init_thread here. Don't set _impure_ptr here. Call do_global_ctors after more things have been initialized. (_dll_crt0): Define zeros buffer as max of needed size of CYGTLS_PADSIZE so that it can be used for two purposes while minimizing stack usage. Initialize _impure_ptr specifically, for speed. Call dll_crt0_1 with buffer argument. (cygwin_dll_init): Call dll_crt0_1 with dummy argument. * dtable.cc (dtable::find_unused_handle): Remove call to AssertResourceOwner. * exceptions.cc: Move _threadinfo stuff to new file. * cygtls.cc: New file. * gentls_offsets: Accommodate increasing complexity of cygtls.h. * hires.h (hires_base::~hires_base): Remove. * init.cc (dll_entry): Remove setting of reents. * thread.cc: Remove syslog.h include. (__getreent): Simplify to use _my_tls. (_reent_winsup): Delete. (AssertResourceOwner): Delete. (MTinterface::Init): Remove setting of _clib and _winsup, with all that entails. (MTinterface::fixup_after_fork): Ditto. (pthread::thread_init_wrapper): Ditto. Also remove call to set_tls_self_pointer. (pthread::set_tls_self_pointer): Eliminate. (pthread::get_tls_self_pointer): Just return _my_tls.tid; (__reent_t::init_clib): Eliminate. * tlsoffsets.h: Regenerate.
This commit is contained in:
parent
1fb9256d7e
commit
29d52c8a27
@ -1,4 +1,74 @@
|
|||||||
2003-12-17 Christopher Faylor <cgf@redhat.com>
|
2003-12-23 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
|
* exceptions.cc (set_signal_mask): Redefine to not pass by address.
|
||||||
|
Report calculated mask in debugging output.
|
||||||
|
* sigproc.h (set_signal_mask): Reflect above change in declaration.
|
||||||
|
|
||||||
|
2003-12-22 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
|
* path.cc (mount_item::build_win32): Take path apart before feeding it
|
||||||
|
to fnmunge.
|
||||||
|
|
||||||
|
2003-12-21 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
|
Throughout, change use of _reent_winsup()-> to _my_tls.locals.
|
||||||
|
instead.
|
||||||
|
Throughout, remove obsolete MT_SAFE/_CYG_THREAD_FAILSAFE considerations.
|
||||||
|
Througout, add cygtls.h include.
|
||||||
|
* Makefile.in (DLL_OFILES): Add cygtls.o. Add some more objects to the
|
||||||
|
-fomit-frame-pointer list.
|
||||||
|
* acconfig.h: Remove obsolete settings.
|
||||||
|
* config.h.in: Ditto.
|
||||||
|
* bsdlib.cc: Add cygtls.h include.
|
||||||
|
* configure.in: Remove --enable-extra-threadsafe-checking.
|
||||||
|
* configure: Regenerate.
|
||||||
|
* cygtls.h (_local_storage): New struct renamed from _winsup_t (sic).
|
||||||
|
(_threadinfo:local_clib): Add new field.
|
||||||
|
(_threadinfo::locals): Ditto.
|
||||||
|
(_threadinfo::init_thread): Accept second _reent * argument.
|
||||||
|
(_threadinfo::call): Define as regparm.
|
||||||
|
(CYGTLS_PADSIZE): Remove unnecessary slop.
|
||||||
|
(_getreent): Define as a macro.
|
||||||
|
* thread.h: Remove _CYG_THREAD_FAILSAFE and MT_SAFE stuff.
|
||||||
|
(_winsup_t): Move to cygtls.h.
|
||||||
|
(ResourceLocks::ResourceLocks): Eliminate empty constructor.
|
||||||
|
(MTinterface::reents): Eliminate.
|
||||||
|
(MTinterface::thread_self_key): Eliminate.
|
||||||
|
(MTinterface::MTinterface): Eliminate.
|
||||||
|
* dcrt0.cc: Include stdio.h for _impure_ptr initialization.
|
||||||
|
(do_global_ctors): Remove run_ctors_p (sic) considerations. Don't call
|
||||||
|
atexit here.
|
||||||
|
(__main): Initialize destructors for user here.
|
||||||
|
(dll_crt0_1): Accept a dummy argument. Don't call init_thread here.
|
||||||
|
Don't set _impure_ptr here. Call do_global_ctors after more things
|
||||||
|
have been initialized.
|
||||||
|
(_dll_crt0): Define zeros buffer as max of needed size of
|
||||||
|
CYGTLS_PADSIZE so that it can be used for two purposes while minimizing
|
||||||
|
stack usage. Initialize _impure_ptr specifically, for speed. Call
|
||||||
|
dll_crt0_1 with buffer argument.
|
||||||
|
(cygwin_dll_init): Call dll_crt0_1 with dummy argument.
|
||||||
|
* dtable.cc (dtable::find_unused_handle): Remove call to
|
||||||
|
AssertResourceOwner.
|
||||||
|
* exceptions.cc: Move _threadinfo stuff to new file.
|
||||||
|
* cygtls.cc: New file.
|
||||||
|
* gentls_offsets: Accommodate increasing complexity of cygtls.h.
|
||||||
|
* hires.h (hires_base::~hires_base): Remove.
|
||||||
|
* init.cc (dll_entry): Remove setting of reents.
|
||||||
|
* thread.cc: Remove syslog.h include.
|
||||||
|
(__getreent): Simplify to use _my_tls.
|
||||||
|
(_reent_winsup): Delete.
|
||||||
|
(AssertResourceOwner): Delete.
|
||||||
|
(MTinterface::Init): Remove setting of _clib and _winsup, with all that
|
||||||
|
entails.
|
||||||
|
(MTinterface::fixup_after_fork): Ditto.
|
||||||
|
(pthread::thread_init_wrapper): Ditto. Also remove call to
|
||||||
|
set_tls_self_pointer.
|
||||||
|
(pthread::set_tls_self_pointer): Eliminate.
|
||||||
|
(pthread::get_tls_self_pointer): Just return _my_tls.tid;
|
||||||
|
(__reent_t::init_clib): Eliminate.
|
||||||
|
* tlsoffsets.h: Regenerate.
|
||||||
|
|
||||||
|
2003-12-17 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
* sigproc.cc (proc_subproc): Simplify code to just remove all zombies
|
* sigproc.cc (proc_subproc): Simplify code to just remove all zombies
|
||||||
if SIGCHLD == SIG_IGN.
|
if SIGCHLD == SIG_IGN.
|
||||||
|
@ -118,9 +118,9 @@ DLL_IMPORTS:=$(w32api_lib)/libkernel32.a
|
|||||||
MT_SAFE_OBJECTS:=
|
MT_SAFE_OBJECTS:=
|
||||||
# Please maintain this list in sorted order, with maximum files per 80 col line
|
# Please maintain this list in sorted order, with maximum files per 80 col line
|
||||||
#
|
#
|
||||||
DLL_OFILES:=assert.o autoload.o bsdlib.o cxx.o cygheap.o cygthread.o dcrt0.o \
|
DLL_OFILES:=assert.o autoload.o bsdlib.o cxx.o cygheap.o cygthread.o cygtls.o \
|
||||||
debug.o delqueue.o devices.o dir.o dlfcn.o dll_init.o dtable.o environ.o \
|
dcrt0.o debug.o delqueue.o devices.o dir.o dlfcn.o dll_init.o dtable.o \
|
||||||
errno.o exceptions.o exec.o external.o fcntl.o fhandler.o \
|
environ.o errno.o exceptions.o exec.o external.o fcntl.o fhandler.o \
|
||||||
fhandler_clipboard.o fhandler_console.o fhandler_disk_file.o \
|
fhandler_clipboard.o fhandler_console.o fhandler_disk_file.o \
|
||||||
fhandler_dsp.o fhandler_fifo.o fhandler_floppy.o fhandler_mem.o \
|
fhandler_dsp.o fhandler_fifo.o fhandler_floppy.o fhandler_mem.o \
|
||||||
fhandler_nodevice.o fhandler_proc.o fhandler_process.o \
|
fhandler_nodevice.o fhandler_proc.o fhandler_process.o \
|
||||||
@ -219,12 +219,11 @@ TARGET_LIBS:=$(LIB_NAME) $(CYGWIN_START) $(GMON_START) $(LIBGMON_A) $(SUBLIBS) $
|
|||||||
|
|
||||||
ifneq "${filter -O%,$(CFLAGS)}" ""
|
ifneq "${filter -O%,$(CFLAGS)}" ""
|
||||||
cygheap_CFLAGS:=-fomit-frame-pointer
|
cygheap_CFLAGS:=-fomit-frame-pointer
|
||||||
devices_CFLAGS:=-fomit-frame-pointer -Os
|
|
||||||
malloc_CFLAGS:=-fomit-frame-pointer
|
|
||||||
malloc_wrapper_CFLAGS:=-fomit-frame-pointer
|
|
||||||
shared_CFLAGS:=-fomit-frame-pointer
|
|
||||||
cygthread_CFLAGS:=-fomit-frame-pointer
|
cygthread_CFLAGS:=-fomit-frame-pointer
|
||||||
miscfuncs_CFLAGS:=-fomit-frame-pointer
|
cygtls_CFLAGS:=-fomit-frame-pointer
|
||||||
|
devices_CFLAGS:=-fomit-frame-pointer -Os
|
||||||
|
dir_CFLAGS:=-fomit-frame-pointer
|
||||||
|
fcntl_CFLAGS:=-fomit-frame-pointer
|
||||||
fhandler_CFLAGS:=-fomit-frame-pointer
|
fhandler_CFLAGS:=-fomit-frame-pointer
|
||||||
fhandler_clipboard_CFLAGS:=-fomit-frame-pointer
|
fhandler_clipboard_CFLAGS:=-fomit-frame-pointer
|
||||||
fhandler_console_CFLAGS:=-fomit-frame-pointer
|
fhandler_console_CFLAGS:=-fomit-frame-pointer
|
||||||
@ -239,16 +238,22 @@ fhandler_raw_CFLAGS:=-fomit-frame-pointer
|
|||||||
fhandler_registry_CFLAGS:=-fomit-frame-pointer
|
fhandler_registry_CFLAGS:=-fomit-frame-pointer
|
||||||
fhandler_serial_CFLAGS:=-fomit-frame-pointer
|
fhandler_serial_CFLAGS:=-fomit-frame-pointer
|
||||||
fhandler_socket_CFLAGS:=-fomit-frame-pointer
|
fhandler_socket_CFLAGS:=-fomit-frame-pointer
|
||||||
|
fhandler_syslog_CFLAGS:=-fomit-frame-pointer
|
||||||
fhandler_tape_CFLAGS:=-fomit-frame-pointer
|
fhandler_tape_CFLAGS:=-fomit-frame-pointer
|
||||||
fhandler_termios_CFLAGS:=-fomit-frame-pointer
|
fhandler_termios_CFLAGS:=-fomit-frame-pointer
|
||||||
fhandler_tty_CFLAGS:=-fomit-frame-pointer
|
fhandler_tty_CFLAGS:=-fomit-frame-pointer
|
||||||
fhandler_virtual_CFLAGS:=-fomit-frame-pointer
|
fhandler_virtual_CFLAGS:=-fomit-frame-pointer
|
||||||
fhandler_windows_CFLAGS:=-fomit-frame-pointer
|
fhandler_windows_CFLAGS:=-fomit-frame-pointer
|
||||||
fhandler_zero_CFLAGS:=-fomit-frame-pointer
|
fhandler_zero_CFLAGS:=-fomit-frame-pointer
|
||||||
|
malloc_CFLAGS:=-fomit-frame-pointer
|
||||||
|
malloc_wrapper_CFLAGS:=-fomit-frame-pointer
|
||||||
|
miscfuncs_CFLAGS:=-fomit-frame-pointer
|
||||||
regcomp_CFLAGS=-fomit-frame-pointer
|
regcomp_CFLAGS=-fomit-frame-pointer
|
||||||
regerror_CFLAGS=-fomit-frame-pointer
|
regerror_CFLAGS=-fomit-frame-pointer
|
||||||
regexec_CFLAGS=-fomit-frame-pointer
|
regexec_CFLAGS=-fomit-frame-pointer
|
||||||
regfree_CFLAGS=-fomit-frame-pointer
|
regfree_CFLAGS=-fomit-frame-pointer
|
||||||
|
shared_CFLAGS:=-fomit-frame-pointer
|
||||||
|
smallprint_CFLAGS:=-fomit-frame-pointer
|
||||||
endif
|
endif
|
||||||
|
|
||||||
.PHONY: all force dll_ofiles install all_target install_target all_host install_host \
|
.PHONY: all force dll_ofiles install all_target install_target all_host install_host \
|
||||||
|
@ -1,18 +1,12 @@
|
|||||||
/* Define if DEBUGGING support is requested. */
|
/* Define if DEBUGGING support is requested. */
|
||||||
#undef DEBUGGING
|
#undef DEBUGGING
|
||||||
|
|
||||||
/* Define if building "extra" thread-safe Cygwin DLL. */
|
|
||||||
#undef _CYG_THREAD_FAILSAFE
|
|
||||||
|
|
||||||
/* Define if GCC supports builtin memset. */
|
/* Define if GCC supports builtin memset. */
|
||||||
#undef HAVE_BUILTIN_MEMSET
|
#undef HAVE_BUILTIN_MEMSET
|
||||||
|
|
||||||
/* Define if MALLOC_DEBUGGING support is requested. */
|
/* Define if MALLOC_DEBUGGING support is requested. */
|
||||||
#undef MALLOC_DEBUG
|
#undef MALLOC_DEBUG
|
||||||
|
|
||||||
/* Define if building thread-safe Cygwin DLL. */
|
|
||||||
#undef _MT_SAFE
|
|
||||||
|
|
||||||
/* Define if using new vfork functionality. */
|
/* Define if using new vfork functionality. */
|
||||||
#undef NEWVFORK
|
#undef NEWVFORK
|
||||||
|
|
||||||
|
@ -1,33 +1,7 @@
|
|||||||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
/* config.h.in. Generated from configure.in by autoheader. */
|
||||||
|
|
||||||
/* Define if using alloca.c. */
|
|
||||||
#undef C_ALLOCA
|
|
||||||
|
|
||||||
/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
|
|
||||||
This function is required for alloca.c support on those systems. */
|
|
||||||
#undef CRAY_STACKSEG_END
|
|
||||||
|
|
||||||
/* Define if you have alloca, as a function or macro. */
|
|
||||||
#undef HAVE_ALLOCA
|
|
||||||
|
|
||||||
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
|
|
||||||
#undef HAVE_ALLOCA_H
|
|
||||||
|
|
||||||
/* If using the C implementation of alloca, define if you know the
|
|
||||||
direction of stack growth for your system; otherwise it will be
|
|
||||||
automatically deduced at run-time.
|
|
||||||
STACK_DIRECTION > 0 => grows toward higher addresses
|
|
||||||
STACK_DIRECTION < 0 => grows toward lower addresses
|
|
||||||
STACK_DIRECTION = 0 => direction of growth unknown
|
|
||||||
*/
|
|
||||||
#undef STACK_DIRECTION
|
|
||||||
|
|
||||||
/* Define if DEBUGGING support is requested. */
|
/* Define if DEBUGGING support is requested. */
|
||||||
#undef DEBUGGING
|
#undef DEBUGGING
|
||||||
|
|
||||||
/* Define if building "extra" thread-safe Cygwin DLL. */
|
|
||||||
#undef _CYG_THREAD_FAILSAFE
|
|
||||||
|
|
||||||
/* Define if GCC supports builtin memset. */
|
/* Define if GCC supports builtin memset. */
|
||||||
#undef HAVE_BUILTIN_MEMSET
|
#undef HAVE_BUILTIN_MEMSET
|
||||||
|
|
||||||
@ -39,3 +13,41 @@
|
|||||||
|
|
||||||
/* Define if using cygserver */
|
/* Define if using cygserver */
|
||||||
#undef USE_SERVER
|
#undef USE_SERVER
|
||||||
|
|
||||||
|
/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
|
||||||
|
systems. This function is required for `alloca.c' support on those systems.
|
||||||
|
*/
|
||||||
|
#undef CRAY_STACKSEG_END
|
||||||
|
|
||||||
|
/* Define to 1 if using `alloca.c'. */
|
||||||
|
#undef C_ALLOCA
|
||||||
|
|
||||||
|
/* Define to 1 if you have `alloca', as a function or macro. */
|
||||||
|
#undef HAVE_ALLOCA
|
||||||
|
|
||||||
|
/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
|
||||||
|
*/
|
||||||
|
#undef HAVE_ALLOCA_H
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#undef PACKAGE_BUGREPORT
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#undef PACKAGE_NAME
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#undef PACKAGE_STRING
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#undef PACKAGE_TARNAME
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#undef PACKAGE_VERSION
|
||||||
|
|
||||||
|
/* If using the C implementation of alloca, define if you know the
|
||||||
|
direction of stack growth for your system; otherwise it will be
|
||||||
|
automatically deduced at run-time.
|
||||||
|
STACK_DIRECTION > 0 => grows toward higher addresses
|
||||||
|
STACK_DIRECTION < 0 => grows toward lower addresses
|
||||||
|
STACK_DIRECTION = 0 => direction of growth unknown */
|
||||||
|
#undef STACK_DIRECTION
|
||||||
|
123
winsup/cygwin/configure
vendored
123
winsup/cygwin/configure
vendored
@ -11,8 +11,6 @@
|
|||||||
ac_help=
|
ac_help=
|
||||||
ac_default_prefix=/usr/local
|
ac_default_prefix=/usr/local
|
||||||
# Any additions from configure.in:
|
# Any additions from configure.in:
|
||||||
ac_help="$ac_help
|
|
||||||
--enable-extra-threadsafe-checking Build a cygwin DLL which is thread safe with extra consistency checking"
|
|
||||||
ac_help="$ac_help
|
ac_help="$ac_help
|
||||||
--enable-debugging Build a cygwin DLL which has more consistency checking for debugging"
|
--enable-debugging Build a cygwin DLL which has more consistency checking for debugging"
|
||||||
ac_help="$ac_help
|
ac_help="$ac_help
|
||||||
@ -566,7 +564,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
|
|||||||
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
||||||
# ./install, which can be erroneously created by make from ./install.sh.
|
# ./install, which can be erroneously created by make from ./install.sh.
|
||||||
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
|
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
|
||||||
echo "configure:570: checking for a BSD compatible install" >&5
|
echo "configure:568: checking for a BSD compatible install" >&5
|
||||||
if test -z "$INSTALL"; then
|
if test -z "$INSTALL"; then
|
||||||
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
@ -652,7 +650,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking host system type""... $ac_c" 1>&6
|
echo $ac_n "checking host system type""... $ac_c" 1>&6
|
||||||
echo "configure:656: checking host system type" >&5
|
echo "configure:654: checking host system type" >&5
|
||||||
|
|
||||||
host_alias=$host
|
host_alias=$host
|
||||||
case "$host_alias" in
|
case "$host_alias" in
|
||||||
@ -673,7 +671,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
|
|||||||
echo "$ac_t""$host" 1>&6
|
echo "$ac_t""$host" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking target system type""... $ac_c" 1>&6
|
echo $ac_n "checking target system type""... $ac_c" 1>&6
|
||||||
echo "configure:677: checking target system type" >&5
|
echo "configure:675: checking target system type" >&5
|
||||||
|
|
||||||
target_alias=$target
|
target_alias=$target
|
||||||
case "$target_alias" in
|
case "$target_alias" in
|
||||||
@ -691,7 +689,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
|
|||||||
echo "$ac_t""$target" 1>&6
|
echo "$ac_t""$target" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking build system type""... $ac_c" 1>&6
|
echo $ac_n "checking build system type""... $ac_c" 1>&6
|
||||||
echo "configure:695: checking build system type" >&5
|
echo "configure:693: checking build system type" >&5
|
||||||
|
|
||||||
build_alias=$build
|
build_alias=$build
|
||||||
case "$build_alias" in
|
case "$build_alias" in
|
||||||
@ -723,7 +721,7 @@ fi
|
|||||||
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
|
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
|
||||||
set dummy ${ac_tool_prefix}gcc; ac_word=$2
|
set dummy ${ac_tool_prefix}gcc; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:727: checking for $ac_word" >&5
|
echo "configure:725: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -755,7 +753,7 @@ if test -n "$ac_tool_prefix"; then
|
|||||||
# Extract the first word of "gcc", so it can be a program name with args.
|
# Extract the first word of "gcc", so it can be a program name with args.
|
||||||
set dummy gcc; ac_word=$2
|
set dummy gcc; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:759: checking for $ac_word" >&5
|
echo "configure:757: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -791,7 +789,7 @@ if test -z "$CC"; then
|
|||||||
# Extract the first word of "cc", so it can be a program name with args.
|
# Extract the first word of "cc", so it can be a program name with args.
|
||||||
set dummy cc; ac_word=$2
|
set dummy cc; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:795: checking for $ac_word" >&5
|
echo "configure:793: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -840,7 +838,7 @@ fi
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
|
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
|
||||||
echo "configure:844: checking whether we are using GNU C" >&5
|
echo "configure:842: checking whether we are using GNU C" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -849,7 +847,7 @@ else
|
|||||||
yes;
|
yes;
|
||||||
#endif
|
#endif
|
||||||
EOF
|
EOF
|
||||||
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:853: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:851: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
|
||||||
ac_cv_prog_gcc=yes
|
ac_cv_prog_gcc=yes
|
||||||
else
|
else
|
||||||
ac_cv_prog_gcc=no
|
ac_cv_prog_gcc=no
|
||||||
@ -864,7 +862,7 @@ if test $ac_cv_prog_gcc = yes; then
|
|||||||
ac_save_CFLAGS="$CFLAGS"
|
ac_save_CFLAGS="$CFLAGS"
|
||||||
CFLAGS=
|
CFLAGS=
|
||||||
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
|
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
|
||||||
echo "configure:868: checking whether ${CC-cc} accepts -g" >&5
|
echo "configure:866: checking whether ${CC-cc} accepts -g" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -894,7 +892,7 @@ fi
|
|||||||
# Extract the first word of "${ac_tool_prefix}g++", so it can be a program name with args.
|
# Extract the first word of "${ac_tool_prefix}g++", so it can be a program name with args.
|
||||||
set dummy ${ac_tool_prefix}g++; ac_word=$2
|
set dummy ${ac_tool_prefix}g++; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:898: checking for $ac_word" >&5
|
echo "configure:896: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -926,7 +924,7 @@ if test -n "$ac_tool_prefix"; then
|
|||||||
# Extract the first word of "g++", so it can be a program name with args.
|
# Extract the first word of "g++", so it can be a program name with args.
|
||||||
set dummy g++; ac_word=$2
|
set dummy g++; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:930: checking for $ac_word" >&5
|
echo "configure:928: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -962,7 +960,7 @@ if test -z "$CXX"; then
|
|||||||
# Extract the first word of "c++", so it can be a program name with args.
|
# Extract the first word of "c++", so it can be a program name with args.
|
||||||
set dummy c++; ac_word=$2
|
set dummy c++; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:966: checking for $ac_word" >&5
|
echo "configure:964: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1018,7 +1016,7 @@ EOF
|
|||||||
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
|
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
|
||||||
set dummy ${ac_tool_prefix}ar; ac_word=$2
|
set dummy ${ac_tool_prefix}ar; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1022: checking for $ac_word" >&5
|
echo "configure:1020: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1050,7 +1048,7 @@ if test -n "$ac_tool_prefix"; then
|
|||||||
# Extract the first word of "ar", so it can be a program name with args.
|
# Extract the first word of "ar", so it can be a program name with args.
|
||||||
set dummy ar; ac_word=$2
|
set dummy ar; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1054: checking for $ac_word" >&5
|
echo "configure:1052: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1085,7 +1083,7 @@ fi
|
|||||||
# Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
|
# Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
|
||||||
set dummy ${ac_tool_prefix}as; ac_word=$2
|
set dummy ${ac_tool_prefix}as; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1089: checking for $ac_word" >&5
|
echo "configure:1087: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1117,7 +1115,7 @@ if test -n "$ac_tool_prefix"; then
|
|||||||
# Extract the first word of "as", so it can be a program name with args.
|
# Extract the first word of "as", so it can be a program name with args.
|
||||||
set dummy as; ac_word=$2
|
set dummy as; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1121: checking for $ac_word" >&5
|
echo "configure:1119: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1152,7 +1150,7 @@ fi
|
|||||||
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
|
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
|
||||||
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
|
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1156: checking for $ac_word" >&5
|
echo "configure:1154: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1184,7 +1182,7 @@ if test -n "$ac_tool_prefix"; then
|
|||||||
# Extract the first word of "ranlib", so it can be a program name with args.
|
# Extract the first word of "ranlib", so it can be a program name with args.
|
||||||
set dummy ranlib; ac_word=$2
|
set dummy ranlib; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1188: checking for $ac_word" >&5
|
echo "configure:1186: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1219,7 +1217,7 @@ fi
|
|||||||
# Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
|
# Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
|
||||||
set dummy ${ac_tool_prefix}ld; ac_word=$2
|
set dummy ${ac_tool_prefix}ld; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1223: checking for $ac_word" >&5
|
echo "configure:1221: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1251,7 +1249,7 @@ if test -n "$ac_tool_prefix"; then
|
|||||||
# Extract the first word of "ld", so it can be a program name with args.
|
# Extract the first word of "ld", so it can be a program name with args.
|
||||||
set dummy ld; ac_word=$2
|
set dummy ld; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1255: checking for $ac_word" >&5
|
echo "configure:1253: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1286,7 +1284,7 @@ fi
|
|||||||
# Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args.
|
# Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args.
|
||||||
set dummy ${ac_tool_prefix}nm; ac_word=$2
|
set dummy ${ac_tool_prefix}nm; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1290: checking for $ac_word" >&5
|
echo "configure:1288: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1318,7 +1316,7 @@ if test -n "$ac_tool_prefix"; then
|
|||||||
# Extract the first word of "nm", so it can be a program name with args.
|
# Extract the first word of "nm", so it can be a program name with args.
|
||||||
set dummy nm; ac_word=$2
|
set dummy nm; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1322: checking for $ac_word" >&5
|
echo "configure:1320: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1353,7 +1351,7 @@ fi
|
|||||||
# Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
|
# Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
|
||||||
set dummy ${ac_tool_prefix}dlltool; ac_word=$2
|
set dummy ${ac_tool_prefix}dlltool; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1357: checking for $ac_word" >&5
|
echo "configure:1355: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1385,7 +1383,7 @@ if test -n "$ac_tool_prefix"; then
|
|||||||
# Extract the first word of "dlltool", so it can be a program name with args.
|
# Extract the first word of "dlltool", so it can be a program name with args.
|
||||||
set dummy dlltool; ac_word=$2
|
set dummy dlltool; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1389: checking for $ac_word" >&5
|
echo "configure:1387: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1420,7 +1418,7 @@ fi
|
|||||||
# Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
|
# Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
|
||||||
set dummy ${ac_tool_prefix}windres; ac_word=$2
|
set dummy ${ac_tool_prefix}windres; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1424: checking for $ac_word" >&5
|
echo "configure:1422: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1452,7 +1450,7 @@ if test -n "$ac_tool_prefix"; then
|
|||||||
# Extract the first word of "windres", so it can be a program name with args.
|
# Extract the first word of "windres", so it can be a program name with args.
|
||||||
set dummy windres; ac_word=$2
|
set dummy windres; ac_word=$2
|
||||||
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
|
||||||
echo "configure:1456: checking for $ac_word" >&5
|
echo "configure:1454: checking for $ac_word" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1486,7 +1484,7 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
|
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
|
||||||
echo "configure:1490: checking how to run the C preprocessor" >&5
|
echo "configure:1488: checking how to run the C preprocessor" >&5
|
||||||
# On Suns, sometimes $CPP names a directory.
|
# On Suns, sometimes $CPP names a directory.
|
||||||
if test -n "$CPP" && test -d "$CPP"; then
|
if test -n "$CPP" && test -d "$CPP"; then
|
||||||
CPP=
|
CPP=
|
||||||
@ -1501,13 +1499,13 @@ else
|
|||||||
# On the NeXT, cc -E runs the code through the compiler's parser,
|
# On the NeXT, cc -E runs the code through the compiler's parser,
|
||||||
# not just through cpp.
|
# not just through cpp.
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1505 "configure"
|
#line 1503 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
Syntax Error
|
Syntax Error
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:1511: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:1509: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
:
|
:
|
||||||
@ -1518,13 +1516,13 @@ else
|
|||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
CPP="${CC-cc} -E -traditional-cpp"
|
CPP="${CC-cc} -E -traditional-cpp"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1522 "configure"
|
#line 1520 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
Syntax Error
|
Syntax Error
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:1528: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:1526: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
:
|
:
|
||||||
@ -1535,13 +1533,13 @@ else
|
|||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
CPP="${CC-cc} -nologo -E"
|
CPP="${CC-cc} -nologo -E"
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1539 "configure"
|
#line 1537 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
Syntax Error
|
Syntax Error
|
||||||
EOF
|
EOF
|
||||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||||
{ (eval echo configure:1545: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
{ (eval echo configure:1543: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||||
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
|
||||||
if test -z "$ac_err"; then
|
if test -z "$ac_err"; then
|
||||||
:
|
:
|
||||||
@ -1568,19 +1566,19 @@ echo "$ac_t""$CPP" 1>&6
|
|||||||
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
|
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
|
||||||
# for constant arguments. Useless!
|
# for constant arguments. Useless!
|
||||||
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
|
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
|
||||||
echo "configure:1572: checking for working alloca.h" >&5
|
echo "configure:1570: checking for working alloca.h" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1577 "configure"
|
#line 1575 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <alloca.h>
|
#include <alloca.h>
|
||||||
int main() {
|
int main() {
|
||||||
char *p = alloca(2 * sizeof(int));
|
char *p = alloca(2 * sizeof(int));
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1584: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:1582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
ac_cv_header_alloca_h=yes
|
ac_cv_header_alloca_h=yes
|
||||||
else
|
else
|
||||||
@ -1601,12 +1599,12 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking for alloca""... $ac_c" 1>&6
|
echo $ac_n "checking for alloca""... $ac_c" 1>&6
|
||||||
echo "configure:1605: checking for alloca" >&5
|
echo "configure:1603: checking for alloca" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1610 "configure"
|
#line 1608 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
@ -1634,7 +1632,7 @@ int main() {
|
|||||||
char *p = (char *) alloca(1);
|
char *p = (char *) alloca(1);
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:1636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
ac_cv_func_alloca_works=yes
|
ac_cv_func_alloca_works=yes
|
||||||
else
|
else
|
||||||
@ -1666,12 +1664,12 @@ EOF
|
|||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
|
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
|
||||||
echo "configure:1670: checking whether alloca needs Cray hooks" >&5
|
echo "configure:1668: checking whether alloca needs Cray hooks" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1675 "configure"
|
#line 1673 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#if defined(CRAY) && ! defined(CRAY2)
|
#if defined(CRAY) && ! defined(CRAY2)
|
||||||
webecray
|
webecray
|
||||||
@ -1696,12 +1694,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
|
|||||||
if test $ac_cv_os_cray = yes; then
|
if test $ac_cv_os_cray = yes; then
|
||||||
for ac_func in _getb67 GETB67 getb67; do
|
for ac_func in _getb67 GETB67 getb67; do
|
||||||
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
|
||||||
echo "configure:1700: checking for $ac_func" >&5
|
echo "configure:1698: checking for $ac_func" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1705 "configure"
|
#line 1703 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* System header to define __stub macros and hopefully few prototypes,
|
/* System header to define __stub macros and hopefully few prototypes,
|
||||||
which can conflict with char $ac_func(); below. */
|
which can conflict with char $ac_func(); below. */
|
||||||
@ -1724,7 +1722,7 @@ $ac_func();
|
|||||||
|
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:1726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_func_$ac_func=yes"
|
eval "ac_cv_func_$ac_func=yes"
|
||||||
else
|
else
|
||||||
@ -1751,7 +1749,7 @@ done
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
|
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
|
||||||
echo "configure:1755: checking stack direction for C alloca" >&5
|
echo "configure:1753: checking stack direction for C alloca" >&5
|
||||||
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1759,7 +1757,7 @@ else
|
|||||||
ac_cv_c_stack_direction=0
|
ac_cv_c_stack_direction=0
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1763 "configure"
|
#line 1761 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
find_stack_direction ()
|
find_stack_direction ()
|
||||||
{
|
{
|
||||||
@ -1778,7 +1776,7 @@ main ()
|
|||||||
exit (find_stack_direction() < 0);
|
exit (find_stack_direction() < 0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
if { (eval echo configure:1780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
|
||||||
then
|
then
|
||||||
ac_cv_c_stack_direction=1
|
ac_cv_c_stack_direction=1
|
||||||
else
|
else
|
||||||
@ -1800,7 +1798,7 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
|
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
|
||||||
echo "configure:1804: checking whether ${MAKE-make} sets \${MAKE}" >&5
|
echo "configure:1802: checking whether ${MAKE-make} sets \${MAKE}" >&5
|
||||||
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
|
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
|
||||||
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
@ -1837,7 +1835,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
|
|||||||
cross_compiling=$ac_cv_prog_cxx_cross
|
cross_compiling=$ac_cv_prog_cxx_cross
|
||||||
|
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1841 "configure"
|
#line 1839 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -1850,7 +1848,7 @@ int main() {
|
|||||||
|
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1854: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
if { (eval echo configure:1852: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
use_builtin_memset=yes
|
use_builtin_memset=yes
|
||||||
else
|
else
|
||||||
@ -1874,25 +1872,6 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
|
|||||||
cross_compiling=$ac_cv_prog_cc_cross
|
cross_compiling=$ac_cv_prog_cc_cross
|
||||||
|
|
||||||
|
|
||||||
# Check whether --enable-extra-threadsafe-checking or --disable-extra-threadsafe-checking was given.
|
|
||||||
if test "${enable_extra_threadsafe_checking+set}" = set; then
|
|
||||||
enableval="$enable_extra_threadsafe_checking"
|
|
||||||
case "${enableval}" in
|
|
||||||
yes)
|
|
||||||
mt_safe_val=1
|
|
||||||
MT_SAFE=yes
|
|
||||||
cat >> confdefs.h <<\EOF
|
|
||||||
#define _CYG_THREAD_FAILSAFE 1
|
|
||||||
EOF
|
|
||||||
|
|
||||||
;;
|
|
||||||
no)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Check whether --enable-debugging or --disable-debugging was given.
|
# Check whether --enable-debugging or --disable-debugging was given.
|
||||||
if test "${enable_debugging+set}" = set; then
|
if test "${enable_debugging+set}" = set; then
|
||||||
enableval="$enable_debugging"
|
enableval="$enable_debugging"
|
||||||
|
@ -117,20 +117,6 @@ if test $use_builtin_memset = "yes"; then
|
|||||||
fi
|
fi
|
||||||
AC_LANG_RESTORE
|
AC_LANG_RESTORE
|
||||||
|
|
||||||
AC_ARG_ENABLE(extra-threadsafe-checking,
|
|
||||||
[ --enable-extra-threadsafe-checking Build a cygwin DLL which is thread safe with extra consistency checking],
|
|
||||||
[case "${enableval}" in
|
|
||||||
yes)
|
|
||||||
mt_safe_val=1
|
|
||||||
MT_SAFE=yes
|
|
||||||
AC_DEFINE(_CYG_THREAD_FAILSAFE)
|
|
||||||
;;
|
|
||||||
no)
|
|
||||||
dnl Don't do anything here to avoid overriding --enable-threadsafe.
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(debugging,
|
AC_ARG_ENABLE(debugging,
|
||||||
[ --enable-debugging Build a cygwin DLL which has more consistency checking for debugging],
|
[ --enable-debugging Build a cygwin DLL which has more consistency checking for debugging],
|
||||||
[case "${enableval}" in
|
[case "${enableval}" in
|
||||||
|
@ -9,16 +9,83 @@ details. */
|
|||||||
#ifndef _CYGTLS_H
|
#ifndef _CYGTLS_H
|
||||||
#define _CYGTLS_H
|
#define _CYGTLS_H
|
||||||
|
|
||||||
#include <cygwin/signal.h>
|
#include <signal.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <grp.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#define _NOMNTENT_FUNCS
|
||||||
|
#include <mntent.h>
|
||||||
|
#undef _NOMNTENT_FUNCS
|
||||||
|
|
||||||
#define CYGTLS_INITIALIZED 0x43227
|
#define CYGTLS_INITIALIZED 0x43227
|
||||||
#define CYGTLS_EXCEPTION (0x43227 + true)
|
#define CYGTLS_EXCEPTION (0x43227 + true)
|
||||||
|
|
||||||
|
#ifndef CYG_MAX_PATH
|
||||||
|
# define CYG_MAX_PATH 260
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UNLEN
|
||||||
|
# define UNLEN 256
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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];
|
||||||
|
|
||||||
|
/* strerror */
|
||||||
|
char strerror_buf[20];
|
||||||
|
|
||||||
|
/* sysloc.cc */
|
||||||
|
char *process_ident;
|
||||||
|
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;
|
||||||
|
struct protoent *protoent_buf;
|
||||||
|
struct servent *servent_buf;
|
||||||
|
struct hostent *hostent_buf;
|
||||||
|
};
|
||||||
|
|
||||||
/* Please keep this file simple. Changes to the below structure may require
|
/* Please keep this file simple. Changes to the below structure may require
|
||||||
acompanying changes to the very simple parser in the perl script
|
acompanying changes to the very simple parser in the perl script
|
||||||
'gentls_offsets' (<<-- start parsing here). */
|
'gentls_offsets' (<<-- start parsing here). */
|
||||||
|
|
||||||
#pragma pack(push,4)
|
|
||||||
typedef __uint32_t __stack_t;
|
typedef __uint32_t __stack_t;
|
||||||
struct _threadinfo
|
struct _threadinfo
|
||||||
{
|
{
|
||||||
@ -35,6 +102,8 @@ struct _threadinfo
|
|||||||
siginfo_t *sigwait_info;
|
siginfo_t *sigwait_info;
|
||||||
siginfo_t infodata;
|
siginfo_t infodata;
|
||||||
struct pthread *tid;
|
struct pthread *tid;
|
||||||
|
struct _reent local_clib;
|
||||||
|
struct _local_storage locals;
|
||||||
struct _threadinfo *prev, *next;
|
struct _threadinfo *prev, *next;
|
||||||
__stack_t stack[8];
|
__stack_t stack[8];
|
||||||
int sig;
|
int sig;
|
||||||
@ -43,9 +112,9 @@ struct _threadinfo
|
|||||||
/*gentls_offsets*/
|
/*gentls_offsets*/
|
||||||
static CRITICAL_SECTION protect_linked_list;
|
static CRITICAL_SECTION protect_linked_list;
|
||||||
static void init ();
|
static void init ();
|
||||||
void init_thread (void *);
|
void init_thread (void *) __attribute__ ((regparm (2)));
|
||||||
static void call (DWORD (*) (void *, void *), void *);
|
static void call (DWORD (*) (void *, void *), void *) __attribute__ ((regparm (3)));
|
||||||
void call2 (DWORD (*) (void *, void *), void *, void *);
|
static void call2 (DWORD (*) (void *, void *), void *, void *) __attribute__ ((regparm (3)));
|
||||||
static struct _threadinfo *find_tls (int sig);
|
static struct _threadinfo *find_tls (int sig);
|
||||||
void remove ();
|
void remove ();
|
||||||
void push (__stack_t, bool = false);
|
void push (__stack_t, bool = false);
|
||||||
@ -67,5 +136,7 @@ extern char *_tlstop __asm__ ("%fs:8");
|
|||||||
#define _my_tls (((_threadinfo *) _tlsbase)[-1])
|
#define _my_tls (((_threadinfo *) _tlsbase)[-1])
|
||||||
extern _threadinfo *_main_tls;
|
extern _threadinfo *_main_tls;
|
||||||
|
|
||||||
#define CYGTLS_PADSIZE (sizeof (_threadinfo) + 64)
|
#define __getreent() (&_my_tls.local_clib)
|
||||||
|
|
||||||
|
#define CYGTLS_PADSIZE (sizeof (_threadinfo))
|
||||||
#endif /*_CYGTLS_H*/
|
#endif /*_CYGTLS_H*/
|
||||||
|
@ -24,7 +24,6 @@ opterr DATA
|
|||||||
optind DATA
|
optind DATA
|
||||||
optopt DATA
|
optopt DATA
|
||||||
optreset DATA
|
optreset DATA
|
||||||
reent_data DATA
|
|
||||||
_alloca NOSIGFE
|
_alloca NOSIGFE
|
||||||
dll_entry@12 NOSIGFE
|
dll_entry@12 NOSIGFE
|
||||||
__assert SIGFE
|
__assert SIGFE
|
||||||
|
@ -10,6 +10,7 @@ details. */
|
|||||||
|
|
||||||
#include "winsup.h"
|
#include "winsup.h"
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "glob.h"
|
#include "glob.h"
|
||||||
#include "exceptions.h"
|
#include "exceptions.h"
|
||||||
@ -89,7 +90,6 @@ extern "C"
|
|||||||
char ***main_environ;
|
char ***main_environ;
|
||||||
/* __progname used in getopt error message */
|
/* __progname used in getopt error message */
|
||||||
char *__progname;
|
char *__progname;
|
||||||
struct _reent reent_data = _REENT_INIT(reent_data);
|
|
||||||
struct per_process __cygwin_user_data =
|
struct per_process __cygwin_user_data =
|
||||||
{/* initial_sp */ 0, /* magic_biscuit */ 0,
|
{/* initial_sp */ 0, /* magic_biscuit */ 0,
|
||||||
/* dll_major */ CYGWIN_VERSION_DLL_MAJOR,
|
/* dll_major */ CYGWIN_VERSION_DLL_MAJOR,
|
||||||
@ -110,7 +110,7 @@ extern "C"
|
|||||||
/* api_minor */ CYGWIN_VERSION_API_MINOR,
|
/* api_minor */ CYGWIN_VERSION_API_MINOR,
|
||||||
/* unused2 */ {0, 0, 0, 0, 0},
|
/* unused2 */ {0, 0, 0, 0, 0},
|
||||||
/* resourcelocks */ &_reslock, /* threadinterface */ &_mtinterf,
|
/* resourcelocks */ &_reslock, /* threadinterface */ &_mtinterf,
|
||||||
/* impure_ptr */ &reent_data,
|
/* impure_ptr */ NULL,
|
||||||
};
|
};
|
||||||
bool ignore_case_with_glob;
|
bool ignore_case_with_glob;
|
||||||
int __declspec (dllexport) _check_for_executable = true;
|
int __declspec (dllexport) _check_for_executable = true;
|
||||||
@ -136,25 +136,18 @@ do_global_dtors (void)
|
|||||||
static void __stdcall
|
static void __stdcall
|
||||||
do_global_ctors (void (**in_pfunc)(), int force)
|
do_global_ctors (void (**in_pfunc)(), int force)
|
||||||
{
|
{
|
||||||
if (!force)
|
if (!force && user_data->forkee)
|
||||||
{
|
return; // inherit constructed stuff from parent pid
|
||||||
if (user_data->forkee || user_data->run_ctors_p)
|
|
||||||
return; // inherit constructed stuff from parent pid
|
|
||||||
user_data->run_ctors_p = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Run ctors backwards, so skip the first entry and find how many
|
/* Run ctors backwards, so skip the first entry and find how many
|
||||||
there are, then run them. */
|
there are, then run them. */
|
||||||
|
|
||||||
void (**pfunc)() = in_pfunc;
|
void (**pfunc) () = in_pfunc;
|
||||||
|
|
||||||
while (*++pfunc)
|
while (*++pfunc)
|
||||||
;
|
;
|
||||||
while (--pfunc > in_pfunc)
|
while (--pfunc > in_pfunc)
|
||||||
(*pfunc) ();
|
(*pfunc) ();
|
||||||
|
|
||||||
if (user_data->magic_biscuit == SIZEOF_PER_PROCESS)
|
|
||||||
atexit (do_global_dtors);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -530,12 +523,8 @@ alloc_stack (child_info_fork *ci)
|
|||||||
opposed to being link-time loaded by Cygwin apps) from a non
|
opposed to being link-time loaded by Cygwin apps) from a non
|
||||||
cygwin app via LoadLibrary. */
|
cygwin app via LoadLibrary. */
|
||||||
static void
|
static void
|
||||||
dll_crt0_1 ()
|
dll_crt0_1 (char *)
|
||||||
{
|
{
|
||||||
char padding[CYGTLS_PADSIZE];
|
|
||||||
_main_tls = &_my_tls;
|
|
||||||
_main_tls->init_thread (padding);
|
|
||||||
|
|
||||||
/* According to onno@stack.urc.tue.nl, the exception handler record must
|
/* According to onno@stack.urc.tue.nl, the exception handler record must
|
||||||
be on the stack. */
|
be on the stack. */
|
||||||
/* FIXME: Verify forked children get their exception handler set up ok. */
|
/* FIXME: Verify forked children get their exception handler set up ok. */
|
||||||
@ -557,8 +546,6 @@ dll_crt0_1 ()
|
|||||||
fork copy code doesn't copy the data in libccrt0.cc (that's why we
|
fork copy code doesn't copy the data in libccrt0.cc (that's why we
|
||||||
pass in the per_process struct into the .dll from libccrt0). */
|
pass in the per_process struct into the .dll from libccrt0). */
|
||||||
|
|
||||||
_impure_ptr = &reent_data;
|
|
||||||
|
|
||||||
user_data->resourcelocks->Init ();
|
user_data->resourcelocks->Init ();
|
||||||
user_data->threadinterface->Init ();
|
user_data->threadinterface->Init ();
|
||||||
|
|
||||||
@ -771,15 +758,16 @@ dll_crt0_1 ()
|
|||||||
/* Disable case-insensitive globbing */
|
/* Disable case-insensitive globbing */
|
||||||
ignore_case_with_glob = false;
|
ignore_case_with_glob = false;
|
||||||
|
|
||||||
/* Flush signals and ensure that signal thread is up and running. Can't
|
|
||||||
do this for noncygwin case since the signal thread is blocked due to
|
|
||||||
LoadLibrary serialization. */
|
|
||||||
wait_for_sigthread ();
|
|
||||||
|
|
||||||
set_errno (0);
|
set_errno (0);
|
||||||
|
|
||||||
MALLOC_CHECK;
|
MALLOC_CHECK;
|
||||||
cygbench (__progname);
|
cygbench (__progname);
|
||||||
|
|
||||||
|
/* Flush signals and ensure that signal thread is up and running. Can't
|
||||||
|
do this for noncygwin case since the signal thread is blocked due to
|
||||||
|
LoadLibrary serialization. */
|
||||||
|
wait_for_sigthread ();
|
||||||
if (user_data->main)
|
if (user_data->main)
|
||||||
exit (user_data->main (__argc, __argv, *user_data->envptr));
|
exit (user_data->main (__argc, __argv, *user_data->envptr));
|
||||||
}
|
}
|
||||||
@ -830,6 +818,21 @@ initial_env ()
|
|||||||
_cygwin_testing = 1;
|
_cygwin_testing = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct _reent *
|
||||||
|
initialize_main_tls (char *padding)
|
||||||
|
{
|
||||||
|
if (!_main_tls)
|
||||||
|
{
|
||||||
|
_threadinfo::init ();
|
||||||
|
_main_tls = &_my_tls;
|
||||||
|
_main_tls->init_thread (padding);
|
||||||
|
_main_tls->local_clib._stdin = &_main_tls->local_clib.__sf[0];
|
||||||
|
_main_tls->local_clib._stdout = &_main_tls->local_clib.__sf[1];
|
||||||
|
_main_tls->local_clib._stderr = &_main_tls->local_clib.__sf[2];
|
||||||
|
}
|
||||||
|
return &_main_tls->local_clib;
|
||||||
|
}
|
||||||
|
|
||||||
/* Wrap the real one, otherwise gdb gets confused about
|
/* Wrap the real one, otherwise gdb gets confused about
|
||||||
two symbols with the same name, but different addresses.
|
two symbols with the same name, but different addresses.
|
||||||
|
|
||||||
@ -840,7 +843,7 @@ extern "C" void __stdcall
|
|||||||
_dll_crt0 ()
|
_dll_crt0 ()
|
||||||
{
|
{
|
||||||
initial_env ();
|
initial_env ();
|
||||||
char zeros[sizeof (fork_info->zero)] = {0};
|
char zeros[max (CYGTLS_PADSIZE, sizeof (child_proc_info->zero))] = {0};
|
||||||
static NO_COPY STARTUPINFO si;
|
static NO_COPY STARTUPINFO si;
|
||||||
|
|
||||||
main_environ = user_data->envptr;
|
main_environ = user_data->envptr;
|
||||||
@ -859,7 +862,8 @@ _dll_crt0 ()
|
|||||||
GetStartupInfo (&si);
|
GetStartupInfo (&si);
|
||||||
child_proc_info = (child_info *) si.lpReserved2;
|
child_proc_info = (child_info *) si.lpReserved2;
|
||||||
if (si.cbReserved2 < EXEC_MAGIC_SIZE || !child_proc_info
|
if (si.cbReserved2 < EXEC_MAGIC_SIZE || !child_proc_info
|
||||||
|| memcmp (child_proc_info->zero, zeros, sizeof (zeros)) != 0)
|
|| memcmp (child_proc_info->zero, zeros,
|
||||||
|
sizeof (child_proc_info->zero)) != 0)
|
||||||
child_proc_info = NULL;
|
child_proc_info = NULL;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -901,19 +905,20 @@ _dll_crt0 ()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_threadinfo::init ();
|
user_data->impure_ptr = _impure_ptr = initialize_main_tls (zeros);
|
||||||
dll_crt0_1 ();
|
dll_crt0_1 (zeros);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
dll_crt0 (per_process *uptr)
|
dll_crt0 (per_process *uptr)
|
||||||
{
|
{
|
||||||
|
char padding[CYGTLS_PADSIZE];
|
||||||
/* Set the local copy of the pointer into the user space. */
|
/* Set the local copy of the pointer into the user space. */
|
||||||
if (uptr && uptr != user_data)
|
if (uptr && uptr != user_data)
|
||||||
{
|
{
|
||||||
memcpy (user_data, uptr, per_process_overwrite);
|
memcpy (user_data, uptr, per_process_overwrite);
|
||||||
*(user_data->impure_ptr_ptr) = &reent_data;
|
*(user_data->impure_ptr_ptr) = initialize_main_tls (padding);
|
||||||
}
|
}
|
||||||
_dll_crt0 ();
|
_dll_crt0 ();
|
||||||
}
|
}
|
||||||
@ -937,13 +942,14 @@ cygwin_dll_init ()
|
|||||||
user_data->envptr = &envp;
|
user_data->envptr = &envp;
|
||||||
user_data->fmode_ptr = &_fmode;
|
user_data->fmode_ptr = &_fmode;
|
||||||
|
|
||||||
dll_crt0_1 ();
|
dll_crt0_1 (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void
|
extern "C" void
|
||||||
__main (void)
|
__main (void)
|
||||||
{
|
{
|
||||||
do_global_ctors (user_data->ctors, false);
|
do_global_ctors (user_data->ctors, false);
|
||||||
|
atexit (do_global_dtors);
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_states NO_COPY exit_state;
|
exit_states NO_COPY exit_state;
|
||||||
|
@ -21,15 +21,13 @@ details. */
|
|||||||
#include "dlfcn.h"
|
#include "dlfcn.h"
|
||||||
#include "dll_init.h"
|
#include "dll_init.h"
|
||||||
#include "cygerrno.h"
|
#include "cygerrno.h"
|
||||||
|
#include "cygtls.h"
|
||||||
#define _dl_error _reent_winsup ()->_dl_error
|
|
||||||
#define _dl_buffer _reent_winsup ()->_dl_buffer
|
|
||||||
|
|
||||||
static void __stdcall
|
static void __stdcall
|
||||||
set_dl_error (const char *str)
|
set_dl_error (const char *str)
|
||||||
{
|
{
|
||||||
__small_sprintf (_dl_buffer, "%s: %E", str);
|
__small_sprintf (_my_tls.locals.dl_buffer, "%s: %E", str);
|
||||||
_dl_error = 1;
|
_my_tls.locals.dl_error = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Look for an executable file given the name and the environment
|
/* Look for an executable file given the name and the environment
|
||||||
@ -145,12 +143,12 @@ char *
|
|||||||
dlerror ()
|
dlerror ()
|
||||||
{
|
{
|
||||||
char *res;
|
char *res;
|
||||||
if (!_dl_error)
|
if (!_my_tls.locals.dl_error)
|
||||||
res = NULL;
|
res = NULL;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_dl_error = 0;
|
_my_tls.locals.dl_error = 0;
|
||||||
res = _dl_buffer;
|
res = _my_tls.locals.dl_buffer;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -200,7 +200,6 @@ dtable::delete_archetype (fhandler_base *fh)
|
|||||||
int
|
int
|
||||||
dtable::find_unused_handle (int start)
|
dtable::find_unused_handle (int start)
|
||||||
{
|
{
|
||||||
AssertResourceOwner (LOCK_FD_LIST, READ_LOCK);
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
for (size_t i = start; i < size; i++)
|
for (size_t i = start; i < size; i++)
|
||||||
|
@ -15,6 +15,7 @@ details. */
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "cygerrno.h"
|
#include "cygerrno.h"
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
|
#include "cygtls.h"
|
||||||
#undef _sys_nerr
|
#undef _sys_nerr
|
||||||
#undef sys_nerr
|
#undef sys_nerr
|
||||||
#undef _sys_errlist
|
#undef _sys_errlist
|
||||||
@ -681,13 +682,8 @@ strerror (int errnum)
|
|||||||
error = "Value too large for defined data type";
|
error = "Value too large for defined data type";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
#ifdef _MT_SAFE
|
__small_sprintf (_my_tls.locals.strerror_buf, "error %d", errnum);
|
||||||
char *buf= _reent_winsup ()->_strerror_buf;
|
error = _my_tls.locals.strerror_buf;
|
||||||
#else
|
|
||||||
static NO_COPY char buf[20];
|
|
||||||
#endif
|
|
||||||
__small_sprintf (buf, "error %d", errnum);
|
|
||||||
error = buf;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,11 +36,6 @@ static int handle_exceptions (EXCEPTION_RECORD *, void *, CONTEXT *, void *);
|
|||||||
extern void sigdelayed ();
|
extern void sigdelayed ();
|
||||||
};
|
};
|
||||||
|
|
||||||
_threadinfo NO_COPY dummy_thread;
|
|
||||||
_threadinfo NO_COPY *_last_thread = &dummy_thread;
|
|
||||||
|
|
||||||
CRITICAL_SECTION NO_COPY _threadinfo::protect_linked_list;
|
|
||||||
|
|
||||||
extern DWORD sigtid;
|
extern DWORD sigtid;
|
||||||
|
|
||||||
extern HANDLE hExeced;
|
extern HANDLE hExeced;
|
||||||
@ -129,101 +124,6 @@ init_exceptions (exception_list *el)
|
|||||||
init_exception_handler (el);
|
init_exception_handler (el);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
_threadinfo::set_state (bool is_exception)
|
|
||||||
{
|
|
||||||
initialized = CYGTLS_INITIALIZED + is_exception;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
_threadinfo::reset_exception ()
|
|
||||||
{
|
|
||||||
if (initialized == CYGTLS_EXCEPTION)
|
|
||||||
{
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
debug_printf ("resetting stack after an exception stack %p, stackptr %p", stack, stackptr);
|
|
||||||
#endif
|
|
||||||
set_state (false);
|
|
||||||
stackptr--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
_threadinfo::call (DWORD (*func) (void *, void *), void *arg)
|
|
||||||
{
|
|
||||||
char buf[CYGTLS_PADSIZE];
|
|
||||||
_my_tls.call2 (func, arg, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
_threadinfo::call2 (DWORD (*func) (void *, void *), void *arg, void *buf)
|
|
||||||
{
|
|
||||||
init_thread (buf);
|
|
||||||
ExitThread (func (arg, buf));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
_threadinfo::init ()
|
|
||||||
{
|
|
||||||
InitializeCriticalSection (&protect_linked_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
_threadinfo::init_thread (void *x)
|
|
||||||
{
|
|
||||||
if (x)
|
|
||||||
{
|
|
||||||
memset (this, 0, sizeof (*this));
|
|
||||||
stackptr = stack;
|
|
||||||
}
|
|
||||||
|
|
||||||
EnterCriticalSection (&protect_linked_list);
|
|
||||||
prev = _last_thread;
|
|
||||||
_last_thread->next = this;
|
|
||||||
_last_thread = this;
|
|
||||||
LeaveCriticalSection (&protect_linked_list);
|
|
||||||
|
|
||||||
set_state (false);
|
|
||||||
errno_addr = &errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
_threadinfo::remove ()
|
|
||||||
{
|
|
||||||
EnterCriticalSection (&protect_linked_list);
|
|
||||||
if (prev)
|
|
||||||
{
|
|
||||||
prev->next = next;
|
|
||||||
if (next)
|
|
||||||
next->prev = prev;
|
|
||||||
if (this == _last_thread)
|
|
||||||
_last_thread = prev;
|
|
||||||
prev = next = NULL;
|
|
||||||
}
|
|
||||||
LeaveCriticalSection (&protect_linked_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
_threadinfo::push (__stack_t addr, bool exception)
|
|
||||||
{
|
|
||||||
*stackptr++ = (__stack_t) addr;
|
|
||||||
set_state (exception);
|
|
||||||
}
|
|
||||||
|
|
||||||
__stack_t
|
|
||||||
_threadinfo::pop ()
|
|
||||||
{
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
assert (stackptr > stack);
|
|
||||||
#endif
|
|
||||||
__stack_t res = *--stackptr;
|
|
||||||
#ifdef DEBUGGING
|
|
||||||
*stackptr = 0;
|
|
||||||
debug_printf ("popped %p, stack %p, stackptr %p", res, stack, stackptr);
|
|
||||||
#endif
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" void
|
extern "C" void
|
||||||
error_start_init (const char *buf)
|
error_start_init (const char *buf)
|
||||||
{
|
{
|
||||||
@ -663,9 +563,9 @@ handle_sigsuspend (sigset_t tempmask)
|
|||||||
sig_dispatch_pending ();
|
sig_dispatch_pending ();
|
||||||
sigset_t oldmask = myself->getsigmask (); // Remember for restoration
|
sigset_t oldmask = myself->getsigmask (); // Remember for restoration
|
||||||
|
|
||||||
set_signal_mask (tempmask & ~SIG_NONMASKABLE);// Let signals we're
|
set_signal_mask (tempmask &= ~SIG_NONMASKABLE, oldmask);// Let signals we're
|
||||||
// interested in through.
|
// interested in through.
|
||||||
sigproc_printf ("old mask %x, new mask %x", oldmask, tempmask);
|
sigproc_printf ("oldmask %p, newmask %p", oldmask, tempmask);
|
||||||
|
|
||||||
pthread_testcancel ();
|
pthread_testcancel ();
|
||||||
pthread::cancelable_wait (signal_arrived, INFINITE);
|
pthread::cancelable_wait (signal_arrived, INFINITE);
|
||||||
@ -974,20 +874,24 @@ set_process_mask (sigset_t newmask)
|
|||||||
/* Set the signal mask for this process.
|
/* Set the signal mask for this process.
|
||||||
Note that some signals are unmaskable, as in UNIX. */
|
Note that some signals are unmaskable, as in UNIX. */
|
||||||
extern "C" void __stdcall
|
extern "C" void __stdcall
|
||||||
set_signal_mask (sigset_t newmask, sigset_t& oldmask)
|
set_signal_mask (sigset_t newmask, sigset_t oldmask)
|
||||||
{
|
{
|
||||||
mask_sync->acquire (INFINITE);
|
mask_sync->acquire (INFINITE);
|
||||||
newmask &= ~SIG_NONMASKABLE;
|
newmask &= ~SIG_NONMASKABLE;
|
||||||
sigproc_printf ("old mask %p, new mask %p", oldmask, newmask);
|
sigset_t mask_bits = oldmask & ~newmask;
|
||||||
|
sigproc_printf ("oldmask %p, newmask %p, mask_bits %p", oldmask, newmask,
|
||||||
|
mask_bits);
|
||||||
myself->setsigmask (newmask); // Set a new mask
|
myself->setsigmask (newmask); // Set a new mask
|
||||||
mask_sync->release ();
|
mask_sync->release ();
|
||||||
if (oldmask & ~newmask)
|
if (mask_bits)
|
||||||
sig_dispatch_pending ();
|
sig_dispatch_pending ();
|
||||||
else
|
else
|
||||||
sigproc_printf ("not calling sig_dispatch_pending");
|
sigproc_printf ("not calling sig_dispatch_pending");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern _threadinfo *_last_thread;
|
||||||
|
|
||||||
_threadinfo *
|
_threadinfo *
|
||||||
_threadinfo::find_tls (int sig)
|
_threadinfo::find_tls (int sig)
|
||||||
{
|
{
|
||||||
|
@ -27,6 +27,7 @@ details. */
|
|||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "cygthread.h"
|
#include "cygthread.h"
|
||||||
#include "pwdgrp.h"
|
#include "pwdgrp.h"
|
||||||
|
#include "cygtls.h"
|
||||||
|
|
||||||
static external_pinfo *
|
static external_pinfo *
|
||||||
fillout_pinfo (pid_t pid, int winpid)
|
fillout_pinfo (pid_t pid, int winpid)
|
||||||
|
@ -263,7 +263,8 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls)
|
|||||||
if (fork_info->stacksize)
|
if (fork_info->stacksize)
|
||||||
{
|
{
|
||||||
_main_tls = &_my_tls;
|
_main_tls = &_my_tls;
|
||||||
_my_tls.init_thread (NULL);
|
_main_tls->init_thread (NULL);
|
||||||
|
// memcpy (&_main_tls->local_clib, _impure_ptr, sizeof (*_main_tls->local_lib));
|
||||||
}
|
}
|
||||||
|
|
||||||
set_file_api_mode (current_codepage);
|
set_file_api_mode (current_codepage);
|
||||||
@ -553,13 +554,22 @@ fork_parent (HANDLE& hParent, dll *&first_dll,
|
|||||||
|
|
||||||
|
|
||||||
MALLOC_CHECK;
|
MALLOC_CHECK;
|
||||||
|
void *impure_beg;
|
||||||
|
void *impure_end;
|
||||||
|
if (&_my_tls == _main_tls)
|
||||||
|
impure_beg = impure_end = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
impure_beg = _impure_ptr;
|
||||||
|
impure_end = _impure_ptr + 1;
|
||||||
|
}
|
||||||
rc = fork_copy (pi, "user/cygwin data",
|
rc = fork_copy (pi, "user/cygwin data",
|
||||||
user_data->data_start, user_data->data_end,
|
user_data->data_start, user_data->data_end,
|
||||||
user_data->bss_start, user_data->bss_end,
|
user_data->bss_start, user_data->bss_end,
|
||||||
cygheap->user_heap.base, cygheap->user_heap.ptr,
|
cygheap->user_heap.base, cygheap->user_heap.ptr,
|
||||||
stack_here, ch.stackbottom,
|
stack_here, ch.stackbottom,
|
||||||
dll_data_start, dll_data_end,
|
dll_data_start, dll_data_end,
|
||||||
dll_bss_start, dll_bss_end, NULL);
|
dll_bss_start, dll_bss_end, impure_beg, impure_end, NULL);
|
||||||
|
|
||||||
__malloc_unlock ();
|
__malloc_unlock ();
|
||||||
MALLOC_CHECK;
|
MALLOC_CHECK;
|
||||||
|
@ -6,7 +6,11 @@ my $struct = '';
|
|||||||
my @fields = ();
|
my @fields = ();
|
||||||
my $def = '';
|
my $def = '';
|
||||||
my $tls = join('', <TLS>);
|
my $tls = join('', <TLS>);
|
||||||
$tls =~ s/\A.*?gentls_offsets[^\n]*\n//os;
|
$tls =~ s/\n[^\n]*gentls_offsets[^\n]*\n(.+)\Z/$1/os;
|
||||||
|
my $pre = $`;
|
||||||
|
substr($tls, 0, length($pre)) = '';
|
||||||
|
$pre =~ s/\n#ifndef _[^\n]+\n/\n/os;
|
||||||
|
$pre .= "\n//*/";
|
||||||
$tls =~ s%/\*\s*gentls_offsets.*?/\*\s*gentls_offsets\s*\*/%%ogs;
|
$tls =~ s%/\*\s*gentls_offsets.*?/\*\s*gentls_offsets\s*\*/%%ogs;
|
||||||
foreach ($tls =~ /^.*\n/mg) {
|
foreach ($tls =~ /^.*\n/mg) {
|
||||||
$def .= $_ if $struct;
|
$def .= $_ if $struct;
|
||||||
@ -32,11 +36,13 @@ foreach ($tls =~ /^.*\n/mg) {
|
|||||||
close TLS;
|
close TLS;
|
||||||
open(TMP, '>', "/tmp/$$.cc") or die "$0: couldn't open temporary index file \"/tmp/$$.c\" - $!\n";
|
open(TMP, '>', "/tmp/$$.cc") or die "$0: couldn't open temporary index file \"/tmp/$$.c\" - $!\n";
|
||||||
print TMP <<EOF;
|
print TMP <<EOF;
|
||||||
|
#define __INSIDE_CYGWIN__
|
||||||
#define __attribute__(X)
|
#define __attribute__(X)
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
typedef void *HANDLE;
|
typedef void *HANDLE;
|
||||||
|
$pre
|
||||||
$def
|
$def
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
|
@ -24,9 +24,7 @@ details. */
|
|||||||
#include "cygerrno.h"
|
#include "cygerrno.h"
|
||||||
#include "cygheap.h"
|
#include "cygheap.h"
|
||||||
#include "pwdgrp.h"
|
#include "pwdgrp.h"
|
||||||
|
#include "cygtls.h"
|
||||||
/* Position in the group cache */
|
|
||||||
#define grp_pos _reent_winsup ()->_grp_pos
|
|
||||||
|
|
||||||
static __group32 *group_buf;
|
static __group32 *group_buf;
|
||||||
static pwdgrp gr (group_buf);
|
static pwdgrp gr (group_buf);
|
||||||
@ -208,16 +206,16 @@ getgrnam (const char *name)
|
|||||||
extern "C" void
|
extern "C" void
|
||||||
endgrent ()
|
endgrent ()
|
||||||
{
|
{
|
||||||
grp_pos = 0;
|
_my_tls.locals.grp_pos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" struct __group32 *
|
extern "C" struct __group32 *
|
||||||
getgrent32 ()
|
getgrent32 ()
|
||||||
{
|
{
|
||||||
if (grp_pos == 0)
|
if (_my_tls.locals.grp_pos == 0)
|
||||||
gr.refresh (true);
|
gr.refresh (true);
|
||||||
if (grp_pos < gr.curr_lines)
|
if (_my_tls.locals.grp_pos < gr.curr_lines)
|
||||||
return group_buf + grp_pos++;
|
return group_buf + _my_tls.locals.grp_pos++;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -233,7 +231,7 @@ getgrent ()
|
|||||||
extern "C" void
|
extern "C" void
|
||||||
setgrent ()
|
setgrent ()
|
||||||
{
|
{
|
||||||
grp_pos = 0;
|
_my_tls.locals.grp_pos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Internal function. ONLY USE THIS INTERNALLY, NEVER `getgrent'!!! */
|
/* Internal function. ONLY USE THIS INTERNALLY, NEVER `getgrent'!!! */
|
||||||
|
@ -27,7 +27,6 @@ class hires_base
|
|||||||
int inited;
|
int inited;
|
||||||
public:
|
public:
|
||||||
virtual LONGLONG usecs (bool justdelta) {return 0LL;}
|
virtual LONGLONG usecs (bool justdelta) {return 0LL;}
|
||||||
virtual ~hires_base () {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class hires_us : hires_base
|
class hires_us : hires_base
|
||||||
|
@ -232,12 +232,13 @@ details. */
|
|||||||
105: Export sigwait.
|
105: Export sigwait.
|
||||||
106: Export flock.
|
106: Export flock.
|
||||||
107: Export fcntl64.
|
107: Export fcntl64.
|
||||||
|
108: Remove unused (hopefully) reent_data export.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
|
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
|
||||||
|
|
||||||
#define CYGWIN_VERSION_API_MAJOR 0
|
#define CYGWIN_VERSION_API_MAJOR 0
|
||||||
#define CYGWIN_VERSION_API_MINOR 107
|
#define CYGWIN_VERSION_API_MINOR 108
|
||||||
|
|
||||||
/* There is also a compatibity version number associated with the
|
/* There is also a compatibity version number associated with the
|
||||||
shared memory regions. It is incremented when incompatible
|
shared memory regions. It is incremented when incompatible
|
||||||
|
@ -51,14 +51,13 @@ dll_entry (HANDLE h, DWORD reason, void *static_load)
|
|||||||
switch (reason)
|
switch (reason)
|
||||||
{
|
{
|
||||||
case DLL_PROCESS_ATTACH:
|
case DLL_PROCESS_ATTACH:
|
||||||
_my_tls.stackptr = _my_tls.stack;
|
|
||||||
dynamically_loaded = (static_load == NULL);
|
dynamically_loaded = (static_load == NULL);
|
||||||
|
__cygwin_user_data.impure_ptr = &_my_tls.local_clib;
|
||||||
|
_my_tls.stackptr = _my_tls.stack;
|
||||||
break;
|
break;
|
||||||
case DLL_PROCESS_DETACH:
|
case DLL_PROCESS_DETACH:
|
||||||
break;
|
break;
|
||||||
case DLL_THREAD_ATTACH:
|
case DLL_THREAD_ATTACH:
|
||||||
if (MT_INTERFACE->reent_key.set (&MT_INTERFACE->reents))
|
|
||||||
api_fatal ("thread initialization failed");
|
|
||||||
munge_threadfunc (h);
|
munge_threadfunc (h);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,8 @@
|
|||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include "cygerrno.h"
|
#include "cygerrno.h"
|
||||||
|
#include "thread.h"
|
||||||
|
#include "cygtls.h"
|
||||||
|
|
||||||
extern "C" int
|
extern "C" int
|
||||||
daemon (int nochdir, int noclose)
|
daemon (int nochdir, int noclose)
|
||||||
|
@ -36,6 +36,7 @@ details. */
|
|||||||
#include "pinfo.h"
|
#include "pinfo.h"
|
||||||
#include "registry.h"
|
#include "registry.h"
|
||||||
#include "wsock_event.h"
|
#include "wsock_event.h"
|
||||||
|
#include "cygtls.h"
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
@ -175,22 +176,16 @@ dump_protoent (struct protoent *p)
|
|||||||
extern "C" char *
|
extern "C" char *
|
||||||
cygwin_inet_ntoa (struct in_addr in)
|
cygwin_inet_ntoa (struct in_addr in)
|
||||||
{
|
{
|
||||||
#ifdef _MT_SAFE
|
|
||||||
#define ntoa_buf _reent_winsup ()->_ntoa_buf
|
|
||||||
#else
|
|
||||||
static char *ntoa_buf = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
char *res = inet_ntoa (in);
|
char *res = inet_ntoa (in);
|
||||||
|
|
||||||
if (ntoa_buf)
|
if (_my_tls.locals.ntoa_buf)
|
||||||
{
|
{
|
||||||
free (ntoa_buf);
|
free (_my_tls.locals.ntoa_buf);
|
||||||
ntoa_buf = NULL;
|
_my_tls.locals.ntoa_buf = NULL;
|
||||||
}
|
}
|
||||||
if (res)
|
if (res)
|
||||||
ntoa_buf = strdup (res);
|
_my_tls.locals.ntoa_buf = strdup (res);
|
||||||
return ntoa_buf;
|
return _my_tls.locals.ntoa_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* exported as inet_addr: BSD 4.3 */
|
/* exported as inet_addr: BSD 4.3 */
|
||||||
@ -587,38 +582,34 @@ dup_ent (void *old, void *src0, struct_type type)
|
|||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MT_SAFE
|
|
||||||
#define protoent_buf _reent_winsup ()->_protoent_buf
|
|
||||||
#else
|
|
||||||
static struct protoent *protoent_buf = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* exported as getprotobyname: standards? */
|
/* exported as getprotobyname: standards? */
|
||||||
extern "C" struct protoent *
|
extern "C" struct protoent *
|
||||||
cygwin_getprotobyname (const char *p)
|
cygwin_getprotobyname (const char *p)
|
||||||
{
|
{
|
||||||
if (check_null_str_errno (p))
|
if (check_null_str_errno (p))
|
||||||
return NULL;
|
return NULL;
|
||||||
protoent_buf = (protoent *) dup_ent (protoent_buf, getprotobyname (p),
|
_my_tls.locals.protoent_buf =
|
||||||
is_protoent);
|
(protoent *) dup_ent (_my_tls.locals.protoent_buf, getprotobyname (p),
|
||||||
if (!protoent_buf)
|
is_protoent);
|
||||||
|
if (!_my_tls.locals.protoent_buf)
|
||||||
set_winsock_errno ();
|
set_winsock_errno ();
|
||||||
|
|
||||||
dump_protoent (protoent_buf);
|
dump_protoent (_my_tls.locals.protoent_buf);
|
||||||
return protoent_buf;
|
return _my_tls.locals.protoent_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* exported as getprotobynumber: standards? */
|
/* exported as getprotobynumber: standards? */
|
||||||
extern "C" struct protoent *
|
extern "C" struct protoent *
|
||||||
cygwin_getprotobynumber (int number)
|
cygwin_getprotobynumber (int number)
|
||||||
{
|
{
|
||||||
protoent_buf = (protoent *) dup_ent (protoent_buf, getprotobynumber (number),
|
_my_tls.locals.protoent_buf =
|
||||||
is_protoent);
|
(protoent *) dup_ent (_my_tls.locals.protoent_buf,
|
||||||
if (!protoent_buf)
|
getprotobynumber (number), is_protoent);
|
||||||
|
if (!_my_tls.locals.protoent_buf)
|
||||||
set_winsock_errno ();
|
set_winsock_errno ();
|
||||||
|
|
||||||
dump_protoent (protoent_buf);
|
dump_protoent (_my_tls.locals.protoent_buf);
|
||||||
return protoent_buf;
|
return _my_tls.locals.protoent_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@ -936,12 +927,6 @@ cygwin_connect (int fd, const struct sockaddr *name, int namelen)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MT_SAFE
|
|
||||||
#define servent_buf _reent_winsup ()->_servent_buf
|
|
||||||
#else
|
|
||||||
static struct servent *servent_buf = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* exported as getservbyname: standards? */
|
/* exported as getservbyname: standards? */
|
||||||
extern "C" struct servent *
|
extern "C" struct servent *
|
||||||
cygwin_getservbyname (const char *name, const char *proto)
|
cygwin_getservbyname (const char *name, const char *proto)
|
||||||
@ -951,13 +936,13 @@ cygwin_getservbyname (const char *name, const char *proto)
|
|||||||
|| (proto != NULL && check_null_str_errno (proto)))
|
|| (proto != NULL && check_null_str_errno (proto)))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
servent_buf = (servent *) dup_ent (servent_buf, getservbyname (name, proto),
|
_my_tls.locals.servent_buf = (servent *) dup_ent (_my_tls.locals.servent_buf, getservbyname (name, proto),
|
||||||
is_servent);
|
is_servent);
|
||||||
if (!servent_buf)
|
if (!_my_tls.locals.servent_buf)
|
||||||
set_winsock_errno ();
|
set_winsock_errno ();
|
||||||
|
|
||||||
syscall_printf ("%x = getservbyname (%s, %s)", servent_buf, name, proto);
|
syscall_printf ("%x = getservbyname (%s, %s)", _my_tls.locals.servent_buf, name, proto);
|
||||||
return servent_buf;
|
return _my_tls.locals.servent_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* exported as getservbyport: standards? */
|
/* exported as getservbyport: standards? */
|
||||||
@ -968,13 +953,13 @@ cygwin_getservbyport (int port, const char *proto)
|
|||||||
if (proto != NULL && check_null_str_errno (proto))
|
if (proto != NULL && check_null_str_errno (proto))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
servent_buf = (servent *) dup_ent (servent_buf, getservbyport (port, proto),
|
_my_tls.locals.servent_buf = (servent *) dup_ent (_my_tls.locals.servent_buf, getservbyport (port, proto),
|
||||||
is_servent);
|
is_servent);
|
||||||
if (!servent_buf)
|
if (!_my_tls.locals.servent_buf)
|
||||||
set_winsock_errno ();
|
set_winsock_errno ();
|
||||||
|
|
||||||
syscall_printf ("%x = getservbyport (%d, %s)", servent_buf, port, proto);
|
syscall_printf ("%x = getservbyport (%d, %s)", _my_tls.locals.servent_buf, port, proto);
|
||||||
return servent_buf;
|
return _my_tls.locals.servent_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" int
|
extern "C" int
|
||||||
@ -999,12 +984,6 @@ cygwin_gethostname (char *name, size_t len)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MT_SAFE
|
|
||||||
#define hostent_buf _reent_winsup ()->_hostent_buf
|
|
||||||
#else
|
|
||||||
static struct hostent *hostent_buf = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* exported as gethostbyname: standards? */
|
/* exported as gethostbyname: standards? */
|
||||||
extern "C" struct hostent *
|
extern "C" struct hostent *
|
||||||
cygwin_gethostbyname (const char *name)
|
cygwin_gethostbyname (const char *name)
|
||||||
@ -1036,19 +1015,19 @@ cygwin_gethostbyname (const char *name)
|
|||||||
return &tmp;
|
return &tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
hostent_buf = (hostent *) dup_ent (hostent_buf, gethostbyname (name),
|
_my_tls.locals.hostent_buf = (hostent *) dup_ent (_my_tls.locals.hostent_buf, gethostbyname (name),
|
||||||
is_hostent);
|
is_hostent);
|
||||||
if (!hostent_buf)
|
if (!_my_tls.locals.hostent_buf)
|
||||||
{
|
{
|
||||||
set_winsock_errno ();
|
set_winsock_errno ();
|
||||||
set_host_errno ();
|
set_host_errno ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug_printf ("h_name %s", hostent_buf->h_name);
|
debug_printf ("h_name %s", _my_tls.locals.hostent_buf->h_name);
|
||||||
h_errno = 0;
|
h_errno = 0;
|
||||||
}
|
}
|
||||||
return hostent_buf;
|
return _my_tls.locals.hostent_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* exported as gethostbyaddr: standards? */
|
/* exported as gethostbyaddr: standards? */
|
||||||
@ -1059,20 +1038,20 @@ cygwin_gethostbyaddr (const char *addr, int len, int type)
|
|||||||
if (__check_invalid_read_ptr_errno (addr, len))
|
if (__check_invalid_read_ptr_errno (addr, len))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
hostent_buf = (hostent *) dup_ent (hostent_buf,
|
_my_tls.locals.hostent_buf = (hostent *) dup_ent (_my_tls.locals.hostent_buf,
|
||||||
gethostbyaddr (addr, len, type),
|
gethostbyaddr (addr, len, type),
|
||||||
is_hostent);
|
is_hostent);
|
||||||
if (!hostent_buf)
|
if (!_my_tls.locals.hostent_buf)
|
||||||
{
|
{
|
||||||
set_winsock_errno ();
|
set_winsock_errno ();
|
||||||
set_host_errno ();
|
set_host_errno ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug_printf ("h_name %s", hostent_buf->h_name);
|
debug_printf ("h_name %s", _my_tls.locals.hostent_buf->h_name);
|
||||||
h_errno = 0;
|
h_errno = 0;
|
||||||
}
|
}
|
||||||
return hostent_buf;
|
return _my_tls.locals.hostent_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* exported as accept: standards? */
|
/* exported as accept: standards? */
|
||||||
|
@ -26,12 +26,8 @@ details. */
|
|||||||
on the first call that needs information from it. */
|
on the first call that needs information from it. */
|
||||||
|
|
||||||
passwd *passwd_buf;
|
passwd *passwd_buf;
|
||||||
/* FIXME: This really should use a constructor, but they are slow */
|
|
||||||
static pwdgrp pr (passwd_buf);
|
static pwdgrp pr (passwd_buf);
|
||||||
|
|
||||||
/* Position in the passwd cache */
|
|
||||||
#define pw_pos _reent_winsup ()->_pw_pos
|
|
||||||
|
|
||||||
/* Parse /etc/passwd line into passwd structure. */
|
/* Parse /etc/passwd line into passwd structure. */
|
||||||
bool
|
bool
|
||||||
pwdgrp::parse_passwd ()
|
pwdgrp::parse_passwd ()
|
||||||
@ -254,10 +250,10 @@ getpwnam_r (const char *nam, struct passwd *pwd, char *buffer, size_t bufsize, s
|
|||||||
extern "C" struct passwd *
|
extern "C" struct passwd *
|
||||||
getpwent (void)
|
getpwent (void)
|
||||||
{
|
{
|
||||||
if (pw_pos == 0)
|
if (_my_tls.locals.pw_pos == 0)
|
||||||
pr.refresh (true);
|
pr.refresh (true);
|
||||||
if (pw_pos < pr.curr_lines)
|
if (_my_tls.locals.pw_pos < pr.curr_lines)
|
||||||
return passwd_buf + pw_pos++;
|
return passwd_buf + _my_tls.locals.pw_pos++;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -271,13 +267,13 @@ getpwduid (__uid16_t)
|
|||||||
extern "C" void
|
extern "C" void
|
||||||
setpwent (void)
|
setpwent (void)
|
||||||
{
|
{
|
||||||
pw_pos = 0;
|
_my_tls.locals.pw_pos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void
|
extern "C" void
|
||||||
endpwent (void)
|
endpwent (void)
|
||||||
{
|
{
|
||||||
pw_pos = 0;
|
_my_tls.locals.pw_pos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" int
|
extern "C" int
|
||||||
@ -289,7 +285,7 @@ setpassent ()
|
|||||||
extern "C" char *
|
extern "C" char *
|
||||||
getpass (const char * prompt)
|
getpass (const char * prompt)
|
||||||
{
|
{
|
||||||
char *pass=_reent_winsup ()->_pass;
|
char *pass = _my_tls.locals.pass;
|
||||||
struct termios ti, newti;
|
struct termios ti, newti;
|
||||||
|
|
||||||
cygheap_fdget fhstdin (0);
|
cygheap_fdget fhstdin (0);
|
||||||
|
@ -72,16 +72,9 @@ details. */
|
|||||||
#include "cygheap.h"
|
#include "cygheap.h"
|
||||||
#include "shared_info.h"
|
#include "shared_info.h"
|
||||||
#include "registry.h"
|
#include "registry.h"
|
||||||
|
#include "cygtls.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#ifdef _MT_SAFE
|
|
||||||
#define iteration _reent_winsup ()->_iteration
|
|
||||||
#define available_drives _reent_winsup ()->available_drives
|
|
||||||
#else
|
|
||||||
static int iteration;
|
|
||||||
static DWORD available_drives;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int normalize_win32_path (const char *src, char *dst);
|
static int normalize_win32_path (const char *src, char *dst);
|
||||||
static void slashify (const char *src, char *dst, int trailing_slash_p);
|
static void slashify (const char *src, char *dst, int trailing_slash_p);
|
||||||
static void backslashify (const char *src, char *dst, int trailing_slash_p);
|
static void backslashify (const char *src, char *dst, int trailing_slash_p);
|
||||||
@ -1235,7 +1228,7 @@ void
|
|||||||
mount_item::fnmunge (char *dst, const char *src)
|
mount_item::fnmunge (char *dst, const char *src)
|
||||||
{
|
{
|
||||||
int name_type;
|
int name_type;
|
||||||
if (!(flags & MOUNT_ENC) || !(name_type = special_name (src)))
|
if (!(name_type = special_name (src)))
|
||||||
strcpy (dst, src);
|
strcpy (dst, src);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1286,7 +1279,25 @@ mount_item::build_win32 (char *dst, const char *src, unsigned *outflags, unsigne
|
|||||||
/* nothing */;
|
/* nothing */;
|
||||||
else if ((!(flags & MOUNT_ENC) && isdrive (dst) && !dst[2]) || *p)
|
else if ((!(flags & MOUNT_ENC) && isdrive (dst) && !dst[2]) || *p)
|
||||||
dst[n++] = '\\';
|
dst[n++] = '\\';
|
||||||
fnmunge (dst + n, p);
|
if (!*p || !(flags & MOUNT_ENC))
|
||||||
|
strcpy (dst + n, p);
|
||||||
|
else
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
char slash = 0;
|
||||||
|
char *s = strchr (p + 1, '/');
|
||||||
|
if (s)
|
||||||
|
{
|
||||||
|
slash = *s;
|
||||||
|
*s = '\0';
|
||||||
|
}
|
||||||
|
fnmunge (dst += n, p);
|
||||||
|
if (!s)
|
||||||
|
break;
|
||||||
|
n = strlen (dst);
|
||||||
|
*s = slash;
|
||||||
|
p = s;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* conv_to_win32_path: Ensure src_path is a pure Win32 path and store
|
/* conv_to_win32_path: Ensure src_path is a pure Win32 path and store
|
||||||
@ -2234,18 +2245,14 @@ mount_info::del_item (const char *path, unsigned flags, int reg_p)
|
|||||||
static mntent *
|
static mntent *
|
||||||
fillout_mntent (const char *native_path, const char *posix_path, unsigned flags)
|
fillout_mntent (const char *native_path, const char *posix_path, unsigned flags)
|
||||||
{
|
{
|
||||||
#ifdef _MT_SAFE
|
struct mntent& ret=_my_tls.locals.mntbuf;
|
||||||
struct mntent &ret=_reent_winsup ()->mntbuf;
|
|
||||||
#else
|
|
||||||
static NO_COPY struct mntent ret;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Remove drivenum from list if we see a x: style path */
|
/* Remove drivenum from list if we see a x: style path */
|
||||||
if (strlen (native_path) == 2 && native_path[1] == ':')
|
if (strlen (native_path) == 2 && native_path[1] == ':')
|
||||||
{
|
{
|
||||||
int drivenum = cyg_tolower (native_path[0]) - 'a';
|
int drivenum = cyg_tolower (native_path[0]) - 'a';
|
||||||
if (drivenum >= 0 && drivenum <= 31)
|
if (drivenum >= 0 && drivenum <= 31)
|
||||||
available_drives &= ~(1 << drivenum);
|
_my_tls.locals.available_drives &= ~(1 << drivenum);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Pass back pointers to mount_table strings reserved for use by
|
/* Pass back pointers to mount_table strings reserved for use by
|
||||||
@ -2253,40 +2260,39 @@ fillout_mntent (const char *native_path, const char *posix_path, unsigned flags)
|
|||||||
table because the mount table might change, causing weird effects
|
table because the mount table might change, causing weird effects
|
||||||
from the getmntent user's point of view. */
|
from the getmntent user's point of view. */
|
||||||
|
|
||||||
strcpy (_reent_winsup ()->mnt_fsname, native_path);
|
strcpy (_my_tls.locals.mnt_fsname, native_path);
|
||||||
ret.mnt_fsname = _reent_winsup ()->mnt_fsname;
|
ret.mnt_fsname = _my_tls.locals.mnt_fsname;
|
||||||
strcpy (_reent_winsup ()->mnt_dir, posix_path);
|
strcpy (_my_tls.locals.mnt_dir, posix_path);
|
||||||
ret.mnt_dir = _reent_winsup ()->mnt_dir;
|
ret.mnt_dir = _my_tls.locals.mnt_dir;
|
||||||
|
|
||||||
if (!(flags & MOUNT_SYSTEM)) /* user mount */
|
if (!(flags & MOUNT_SYSTEM)) /* user mount */
|
||||||
strcpy (_reent_winsup ()->mnt_type, (char *) "user");
|
strcpy (_my_tls.locals.mnt_type, (char *) "user");
|
||||||
else /* system mount */
|
else /* system mount */
|
||||||
strcpy (_reent_winsup ()->mnt_type, (char *) "system");
|
strcpy (_my_tls.locals.mnt_type, (char *) "system");
|
||||||
|
|
||||||
ret.mnt_type = _reent_winsup ()->mnt_type;
|
ret.mnt_type = _my_tls.locals.mnt_type;
|
||||||
|
|
||||||
/* mnt_opts is a string that details mount params such as
|
/* mnt_opts is a string that details mount params such as
|
||||||
binary or textmode, or exec. We don't print
|
binary or textmode, or exec. We don't print
|
||||||
`silent' here; it's a magic internal thing. */
|
`silent' here; it's a magic internal thing. */
|
||||||
|
|
||||||
if (!(flags & MOUNT_BINARY))
|
if (!(flags & MOUNT_BINARY))
|
||||||
strcpy (_reent_winsup ()->mnt_opts, (char *) "textmode");
|
strcpy (_my_tls.locals.mnt_opts, (char *) "textmode");
|
||||||
else
|
else
|
||||||
strcpy (_reent_winsup ()->mnt_opts, (char *) "binmode");
|
strcpy (_my_tls.locals.mnt_opts, (char *) "binmode");
|
||||||
|
|
||||||
if (flags & MOUNT_CYGWIN_EXEC)
|
if (flags & MOUNT_CYGWIN_EXEC)
|
||||||
strcat (_reent_winsup ()->mnt_opts, (char *) ",cygexec");
|
strcat (_my_tls.locals.mnt_opts, (char *) ",cygexec");
|
||||||
else if (flags & MOUNT_EXEC)
|
else if (flags & MOUNT_EXEC)
|
||||||
strcat (_reent_winsup ()->mnt_opts, (char *) ",exec");
|
strcat (_my_tls.locals.mnt_opts, (char *) ",exec");
|
||||||
else if (flags & MOUNT_NOTEXEC)
|
else if (flags & MOUNT_NOTEXEC)
|
||||||
strcat (_reent_winsup ()->mnt_opts, (char *) ",noexec");
|
strcat (_my_tls.locals.mnt_opts, (char *) ",noexec");
|
||||||
if (flags & MOUNT_ENC)
|
if (flags & MOUNT_ENC)
|
||||||
strcat (_reent_winsup ()->mnt_opts, ",managed");
|
strcat (_my_tls.locals.mnt_opts, ",managed");
|
||||||
|
|
||||||
if ((flags & MOUNT_CYGDRIVE)) /* cygdrive */
|
if ((flags & MOUNT_CYGDRIVE)) /* cygdrive */
|
||||||
strcat (_reent_winsup ()->mnt_opts, (char *) ",noumount");
|
strcat (_my_tls.locals.mnt_opts, (char *) ",noumount");
|
||||||
|
ret.mnt_opts = _my_tls.locals.mnt_opts;
|
||||||
ret.mnt_opts = _reent_winsup ()->mnt_opts;
|
|
||||||
|
|
||||||
ret.mnt_freq = 1;
|
ret.mnt_freq = 1;
|
||||||
ret.mnt_passno = 1;
|
ret.mnt_passno = 1;
|
||||||
@ -2307,16 +2313,16 @@ cygdrive_getmntent ()
|
|||||||
DWORD mask = 1, drive = 'a';
|
DWORD mask = 1, drive = 'a';
|
||||||
struct mntent *ret = NULL;
|
struct mntent *ret = NULL;
|
||||||
|
|
||||||
while (available_drives)
|
while (_my_tls.locals.available_drives)
|
||||||
{
|
{
|
||||||
for (/* nothing */; drive <= 'z'; mask <<= 1, drive++)
|
for (/* nothing */; drive <= 'z'; mask <<= 1, drive++)
|
||||||
if (available_drives & mask)
|
if (_my_tls.locals.available_drives & mask)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
__small_sprintf (native_path, "%c:\\", drive);
|
__small_sprintf (native_path, "%c:\\", drive);
|
||||||
if (GetFileAttributes (native_path) == INVALID_FILE_ATTRIBUTES)
|
if (GetFileAttributes (native_path) == INVALID_FILE_ATTRIBUTES)
|
||||||
{
|
{
|
||||||
available_drives &= ~mask;
|
_my_tls.locals.available_drives &= ~mask;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
native_path[2] = '\0';
|
native_path[2] = '\0';
|
||||||
@ -2425,15 +2431,15 @@ cygwin_umount (const char *path, unsigned flags)
|
|||||||
extern "C" FILE *
|
extern "C" FILE *
|
||||||
setmntent (const char *filep, const char *)
|
setmntent (const char *filep, const char *)
|
||||||
{
|
{
|
||||||
iteration = 0;
|
_my_tls.locals.iteration = 0;
|
||||||
available_drives = GetLogicalDrives ();
|
_my_tls.locals.available_drives = GetLogicalDrives ();
|
||||||
return (FILE *) filep;
|
return (FILE *) filep;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" struct mntent *
|
extern "C" struct mntent *
|
||||||
getmntent (FILE *)
|
getmntent (FILE *)
|
||||||
{
|
{
|
||||||
return mount_table->getmntent (iteration++);
|
return mount_table->getmntent (_my_tls.locals.iteration++);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" int
|
extern "C" int
|
||||||
|
@ -257,6 +257,7 @@ pinfo::set_acl()
|
|||||||
void
|
void
|
||||||
_pinfo::set_ctty (tty_min *tc, int flags, fhandler_tty_slave *arch)
|
_pinfo::set_ctty (tty_min *tc, int flags, fhandler_tty_slave *arch)
|
||||||
{
|
{
|
||||||
|
debug_printf ("ctty %d", ctty);
|
||||||
if ((ctty < 0 || ctty == tc->ntty) && !(flags & O_NOCTTY))
|
if ((ctty < 0 || ctty == tc->ntty) && !(flags & O_NOCTTY))
|
||||||
{
|
{
|
||||||
ctty = tc->ntty;
|
ctty = tc->ntty;
|
||||||
|
@ -22,6 +22,7 @@ extern struct __group32 *internal_getgrent (int);
|
|||||||
int internal_getgroups (int, __gid32_t *, cygpsid * = NULL);
|
int internal_getgroups (int, __gid32_t *, cygpsid * = NULL);
|
||||||
|
|
||||||
#include "sync.h"
|
#include "sync.h"
|
||||||
|
#include "cygtls.h"
|
||||||
class pwdgrp
|
class pwdgrp
|
||||||
{
|
{
|
||||||
unsigned pwdgrp_buf_elem_size;
|
unsigned pwdgrp_buf_elem_size;
|
||||||
|
@ -588,8 +588,17 @@ int __stdcall
|
|||||||
sig_dispatch_pending ()
|
sig_dispatch_pending ()
|
||||||
{
|
{
|
||||||
if (exit_state || GetCurrentThreadId () == sigtid || !sigqueue.start.next)
|
if (exit_state || GetCurrentThreadId () == sigtid || !sigqueue.start.next)
|
||||||
return 0;
|
{
|
||||||
|
#ifdef DEBUGGING
|
||||||
|
sigproc_printf ("exit_state %d, GetCurrentThreadId () %p, sigtid %p, sigqueue.start.next %p",
|
||||||
|
exit_state, GetCurrentThreadId (), sigtid, sigqueue.start.next);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUGGING
|
||||||
|
sigproc_printf ("flushing");
|
||||||
|
#endif
|
||||||
(void) sig_send (myself, __SIGFLUSH);
|
(void) sig_send (myself, __SIGFLUSH);
|
||||||
return call_signal_handler_now ();
|
return call_signal_handler_now ();
|
||||||
}
|
}
|
||||||
@ -1155,8 +1164,15 @@ wait_sig (VOID *self)
|
|||||||
sig_clear (-pack.sig);
|
sig_clear (-pack.sig);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (sig_handle (pack.sig, *pack.mask, pack.pid, pack.tls) <= 0)
|
int sigres = sig_handle (pack.sig, *pack.mask, pack.pid, pack.tls);
|
||||||
sigqueue.add (pack.sig, pack.pid, pack.tls);// FIXME: Shouldn't add this in !sh condition
|
if (sigres <= 0)
|
||||||
|
{
|
||||||
|
#ifdef DEBUGGING
|
||||||
|
if (!sigres)
|
||||||
|
system_printf ("Failed to arm signal %d from pid %d");
|
||||||
|
#endif
|
||||||
|
sigqueue.add (pack.sig, pack.pid, pack.tls);// FIXME: Shouldn't add this in !sh condition
|
||||||
|
}
|
||||||
if (pack.sig == SIGCHLD)
|
if (pack.sig == SIGCHLD)
|
||||||
proc_subproc (PROC_CLEARWAIT, 0);
|
proc_subproc (PROC_CLEARWAIT, 0);
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ extern HANDLE sigCONT;
|
|||||||
bool __stdcall my_parent_is_alive ();
|
bool __stdcall my_parent_is_alive ();
|
||||||
int __stdcall sig_dispatch_pending ();
|
int __stdcall sig_dispatch_pending ();
|
||||||
#ifdef _PINFO_H
|
#ifdef _PINFO_H
|
||||||
extern "C" void __stdcall set_signal_mask (sigset_t newmask, sigset_t& = myself->getsigmask ());
|
extern "C" void __stdcall set_signal_mask (sigset_t newmask, sigset_t = myself->getsigmask ());
|
||||||
#endif
|
#endif
|
||||||
int __stdcall handle_sigprocmask (int sig, const sigset_t *set,
|
int __stdcall handle_sigprocmask (int sig, const sigset_t *set,
|
||||||
sigset_t *oldset, sigset_t& opmask)
|
sigset_t *oldset, sigset_t& opmask)
|
||||||
|
@ -319,7 +319,9 @@ setsid (void)
|
|||||||
/* assuming that fork was successful */
|
/* assuming that fork was successful */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (myself->pgid != myself->pid)
|
if (myself->pgid == myself->pid)
|
||||||
|
syscall_printf ("hmm. pgid %d pid %d", myself->pgid, myself->pid);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
if (myself->ctty >= 0 && fhandler_console::open_fhs <= 0)
|
if (myself->ctty >= 0 && fhandler_console::open_fhs <= 0)
|
||||||
{
|
{
|
||||||
|
@ -21,6 +21,7 @@ details. */
|
|||||||
#include "cygerrno.h"
|
#include "cygerrno.h"
|
||||||
#include "cygheap.h"
|
#include "cygheap.h"
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
|
#include "cygtls.h"
|
||||||
|
|
||||||
/* FIXME: These should probably be in the registry. */
|
/* FIXME: These should probably be in the registry. */
|
||||||
/* FIXME: The Win95 path should be whatever slash is */
|
/* FIXME: The Win95 path should be whatever slash is */
|
||||||
@ -38,50 +39,31 @@ get_win95_event_log_path ()
|
|||||||
return WIN95_EVENT_LOG_PATH;
|
return WIN95_EVENT_LOG_PATH;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: For MT safe code these will need to be replaced */
|
/* openlog: save the passed args. Don't open the
|
||||||
|
system log (NT) or log file (95) yet. */
|
||||||
#ifdef _MT_SAFE
|
|
||||||
#define process_ident _reent_winsup ()->_process_ident
|
|
||||||
#define process_logopt _reent_winsup ()->_process_logopt
|
|
||||||
#define process_facility _reent_winsup ()->_process_facility
|
|
||||||
/* Default priority logmask */
|
|
||||||
#define process_logmask _reent_winsup ()->_process_logmask
|
|
||||||
#else
|
|
||||||
static char *process_ident = 0;
|
|
||||||
static int process_logopt = 0;
|
|
||||||
static int process_facility = 0;
|
|
||||||
|
|
||||||
/* Default priority logmask */
|
|
||||||
static int process_logmask = LOG_UPTO (LOG_DEBUG);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* openlog: save the passed args. Don't open the
|
|
||||||
* system log (NT) or log file (95) yet.
|
|
||||||
*/
|
|
||||||
extern "C" void
|
extern "C" void
|
||||||
openlog (const char *ident, int logopt, int facility)
|
openlog (const char *ident, int logopt, int facility)
|
||||||
{
|
{
|
||||||
debug_printf ("openlog called with (%s, %d, %d)",
|
debug_printf ("openlog called with (%s, %d, %d)",
|
||||||
ident ? ident : "<NULL>", logopt, facility);
|
ident ? ident : "<NULL>", logopt, facility);
|
||||||
|
|
||||||
if (process_ident != NULL)
|
if (_my_tls.locals.process_ident != NULL)
|
||||||
{
|
{
|
||||||
free (process_ident);
|
free (_my_tls.locals.process_ident);
|
||||||
process_ident = 0;
|
_my_tls.locals.process_ident = 0;
|
||||||
}
|
}
|
||||||
if (ident)
|
if (ident)
|
||||||
{
|
{
|
||||||
process_ident = (char *) malloc (strlen (ident) + 1);
|
_my_tls.locals.process_ident = (char *) malloc (strlen (ident) + 1);
|
||||||
if (process_ident == NULL)
|
if (_my_tls.locals.process_ident == NULL)
|
||||||
{
|
{
|
||||||
debug_printf ("failed to allocate memory for process_ident");
|
debug_printf ("failed to allocate memory for _my_tls.locals.process_ident");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
strcpy (process_ident, ident);
|
strcpy (_my_tls.locals.process_ident, ident);
|
||||||
}
|
}
|
||||||
process_logopt = logopt;
|
_my_tls.locals.process_logopt = logopt;
|
||||||
process_facility = facility;
|
_my_tls.locals.process_facility = facility;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* setlogmask: set the log priority mask and return previous mask.
|
/* setlogmask: set the log priority mask and return previous mask.
|
||||||
@ -90,16 +72,16 @@ int
|
|||||||
setlogmask (int maskpri)
|
setlogmask (int maskpri)
|
||||||
{
|
{
|
||||||
if (maskpri == 0)
|
if (maskpri == 0)
|
||||||
return process_logmask;
|
return _my_tls.locals.process_logmask;
|
||||||
|
|
||||||
int old_mask = process_logmask;
|
int old_mask = _my_tls.locals.process_logmask;
|
||||||
process_logmask = maskpri & LOG_PRIMASK;
|
_my_tls.locals.process_logmask = maskpri & LOG_PRIMASK;
|
||||||
|
|
||||||
return old_mask;
|
return old_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Private class used to handle formatting of syslog message */
|
/* Private class used to handle formatting of syslog message
|
||||||
/* It is named pass_handler because it does a two-pass handling of log
|
It is named pass_handler because it does a two-pass handling of log
|
||||||
strings. The first pass counts the length of the string, and the second
|
strings. The first pass counts the length of the string, and the second
|
||||||
one builds the string. */
|
one builds the string. */
|
||||||
|
|
||||||
@ -211,10 +193,10 @@ vsyslog (int priority, const char *message, va_list ap)
|
|||||||
{
|
{
|
||||||
debug_printf ("%x %s", priority, message);
|
debug_printf ("%x %s", priority, message);
|
||||||
/* If the priority fails the current mask, reject */
|
/* If the priority fails the current mask, reject */
|
||||||
if (((priority & LOG_PRIMASK) & process_logmask) == 0)
|
if (((priority & LOG_PRIMASK) & _my_tls.locals.process_logmask) == 0)
|
||||||
{
|
{
|
||||||
debug_printf ("failing message %x due to priority mask %x",
|
debug_printf ("failing message %x due to priority mask %x",
|
||||||
priority, process_logmask);
|
priority, _my_tls.locals.process_logmask);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,12 +272,12 @@ vsyslog (int priority, const char *message, va_list ap)
|
|||||||
pass.set_message ((char *) alloca (n));
|
pass.set_message ((char *) alloca (n));
|
||||||
|
|
||||||
/* Deal with ident_string */
|
/* Deal with ident_string */
|
||||||
if (process_ident != NULL)
|
if (_my_tls.locals.process_ident != NULL)
|
||||||
{
|
{
|
||||||
if (pass.print ("%s : ", process_ident) == -1)
|
if (pass.print ("%s : ", _my_tls.locals.process_ident) == -1)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (process_logopt & LOG_PID)
|
if (_my_tls.locals.process_logopt & LOG_PID)
|
||||||
{
|
{
|
||||||
if (pass.print ("PID %u : ", getpid ()) == -1)
|
if (pass.print ("PID %u : ", getpid ()) == -1)
|
||||||
return;
|
return;
|
||||||
@ -353,8 +335,8 @@ vsyslog (int priority, const char *message, va_list ap)
|
|||||||
if (wincap.has_eventlog ())
|
if (wincap.has_eventlog ())
|
||||||
{
|
{
|
||||||
/* For NT, open the event log and send the message */
|
/* For NT, open the event log and send the message */
|
||||||
HANDLE hEventSrc = RegisterEventSourceA (NULL, (process_ident != NULL) ?
|
HANDLE hEventSrc = RegisterEventSourceA (NULL, (_my_tls.locals.process_ident != NULL) ?
|
||||||
process_ident : CYGWIN_LOG_NAME);
|
_my_tls.locals.process_ident : CYGWIN_LOG_NAME);
|
||||||
if (hEventSrc == NULL)
|
if (hEventSrc == NULL)
|
||||||
{
|
{
|
||||||
debug_printf ("RegisterEventSourceA failed with %E");
|
debug_printf ("RegisterEventSourceA failed with %E");
|
||||||
|
@ -34,7 +34,6 @@ details. */
|
|||||||
#include "cygerrno.h"
|
#include "cygerrno.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <syslog.h>
|
|
||||||
#include "pinfo.h"
|
#include "pinfo.h"
|
||||||
#include "sigproc.h"
|
#include "sigproc.h"
|
||||||
#include "perprocess.h"
|
#include "perprocess.h"
|
||||||
@ -48,112 +47,36 @@ details. */
|
|||||||
|
|
||||||
extern int threadsafe;
|
extern int threadsafe;
|
||||||
|
|
||||||
|
#undef __getreent
|
||||||
extern "C" struct _reent *
|
extern "C" struct _reent *
|
||||||
__getreent ()
|
__getreent ()
|
||||||
{
|
{
|
||||||
struct __reent_t *_r =
|
return &_my_tls.local_clib;
|
||||||
(struct __reent_t *) MT_INTERFACE->reent_key.get ();
|
|
||||||
|
|
||||||
if (_r == 0)
|
|
||||||
{
|
|
||||||
#ifdef _CYG_THREAD_FAILSAFE
|
|
||||||
system_printf ("local thread storage not inited");
|
|
||||||
#endif
|
|
||||||
/* Return _impure_ptr as long as MTinterface is not initialized */
|
|
||||||
return _impure_ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _r->_clib;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct _winsup_t *
|
|
||||||
_reent_winsup ()
|
|
||||||
{
|
|
||||||
struct __reent_t *_r =
|
|
||||||
(struct __reent_t *) MT_INTERFACE->reent_key.get ();
|
|
||||||
|
|
||||||
if (_r == 0)
|
|
||||||
{
|
|
||||||
#ifdef _CYG_THREAD_FAILSAFE
|
|
||||||
system_printf ("local thread storage not inited");
|
|
||||||
#endif
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _r->_winsup;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline LPCRITICAL_SECTION
|
inline LPCRITICAL_SECTION
|
||||||
ResourceLocks::Lock (int _resid)
|
ResourceLocks::Lock (int _resid)
|
||||||
{
|
{
|
||||||
#ifdef _CYG_THREAD_FAILSAFE
|
|
||||||
if (!inited)
|
|
||||||
system_printf ("lock called before initialization");
|
|
||||||
|
|
||||||
thread_printf
|
|
||||||
("Get Resource lock %d ==> %p for %p , real : %d , threadid %d ", _resid,
|
|
||||||
&lock, user_data, myself->pid, GetCurrentThreadId ());
|
|
||||||
#endif
|
|
||||||
return &lock;
|
return &lock;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SetResourceLock (int _res_id, int _mode, const char *_function)
|
SetResourceLock (int _res_id, int _mode, const char *_function)
|
||||||
{
|
{
|
||||||
#ifdef _CYG_THREAD_FAILSAFE
|
|
||||||
thread_printf ("Set resource lock %d mode %d for %s start",
|
|
||||||
_res_id, _mode, _function);
|
|
||||||
#endif
|
|
||||||
EnterCriticalSection (user_data->resourcelocks->Lock (_res_id));
|
EnterCriticalSection (user_data->resourcelocks->Lock (_res_id));
|
||||||
|
|
||||||
#ifdef _CYG_THREAD_FAILSAFE
|
|
||||||
user_data->resourcelocks->owner = GetCurrentThreadId ();
|
|
||||||
user_data->resourcelocks->count++;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ReleaseResourceLock (int _res_id, int _mode, const char *_function)
|
ReleaseResourceLock (int _res_id, int _mode, const char *_function)
|
||||||
{
|
{
|
||||||
#ifdef _CYG_THREAD_FAILSAFE
|
|
||||||
thread_printf ("Release resource lock %d mode %d for %s done", _res_id,
|
|
||||||
_mode, _function);
|
|
||||||
|
|
||||||
AssertResourceOwner (_res_id, _mode);
|
|
||||||
user_data->resourcelocks->count--;
|
|
||||||
if (user_data->resourcelocks->count == 0)
|
|
||||||
user_data->resourcelocks->owner = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
LeaveCriticalSection (user_data->resourcelocks->Lock (_res_id));
|
LeaveCriticalSection (user_data->resourcelocks->Lock (_res_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _CYG_THREAD_FAILSAFE
|
|
||||||
void
|
|
||||||
AssertResourceOwner (int _res_id, int _mode)
|
|
||||||
{
|
|
||||||
|
|
||||||
thread_printf
|
|
||||||
("Assert Resource lock %d ==> for %p , real : %d , threadid %d count %d owner %d",
|
|
||||||
_res_id, user_data, myself->pid, GetCurrentThreadId (),
|
|
||||||
user_data->resourcelocks->count, user_data->resourcelocks->owner);
|
|
||||||
if (user_data && (user_data->resourcelocks->owner != GetCurrentThreadId ()))
|
|
||||||
system_printf ("assertion failed, not the resource owner");
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ResourceLocks::Init ()
|
ResourceLocks::Init ()
|
||||||
{
|
{
|
||||||
InitializeCriticalSection (&lock);
|
InitializeCriticalSection (&lock);
|
||||||
inited = true;
|
inited = true;
|
||||||
|
|
||||||
#ifdef _CYG_THREAD_FAILSAFE
|
|
||||||
owner = 0;
|
|
||||||
count = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
thread_printf ("lock %p inited by %p , %d", &lock, user_data, myself->pid);
|
thread_printf ("lock %p inited by %p , %d", &lock, user_data, myself->pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,11 +94,6 @@ ResourceLocks::Delete ()
|
|||||||
void
|
void
|
||||||
MTinterface::Init ()
|
MTinterface::Init ()
|
||||||
{
|
{
|
||||||
reents._clib = _impure_ptr;
|
|
||||||
reents._winsup = &winsup_reent;
|
|
||||||
winsup_reent._process_logmask = LOG_UPTO (LOG_DEBUG);
|
|
||||||
reent_key.set (&reents);
|
|
||||||
|
|
||||||
pthread_mutex::init_mutex ();
|
pthread_mutex::init_mutex ();
|
||||||
pthread_cond::init_mutex ();
|
pthread_cond::init_mutex ();
|
||||||
pthread_rwlock::init_mutex ();
|
pthread_rwlock::init_mutex ();
|
||||||
@ -193,14 +111,6 @@ MTinterface::fixup_after_fork (void)
|
|||||||
{
|
{
|
||||||
pthread_key::fixup_after_fork ();
|
pthread_key::fixup_after_fork ();
|
||||||
|
|
||||||
/* As long as the signal handling not multithreaded
|
|
||||||
switch reents storage back to _impure_ptr for the mainthread
|
|
||||||
to support fork from threads other than the mainthread */
|
|
||||||
reents._clib = _impure_ptr;
|
|
||||||
reents._winsup = &winsup_reent;
|
|
||||||
winsup_reent._process_logmask = LOG_UPTO (LOG_DEBUG);
|
|
||||||
reent_key.set (&reents);
|
|
||||||
|
|
||||||
threadcount = 0;
|
threadcount = 0;
|
||||||
pthread::init_mainthread ();
|
pthread::init_mainthread ();
|
||||||
|
|
||||||
@ -232,7 +142,6 @@ pthread::init_mainthread ()
|
|||||||
GetCurrentProcess (), &thread->win32_obj_id,
|
GetCurrentProcess (), &thread->win32_obj_id,
|
||||||
0, FALSE, DUPLICATE_SAME_ACCESS))
|
0, FALSE, DUPLICATE_SAME_ACCESS))
|
||||||
api_fatal ("failed to create mainthread handle");
|
api_fatal ("failed to create mainthread handle");
|
||||||
thread->set_tls_self_pointer ();
|
|
||||||
if (!thread->create_cancel_event ())
|
if (!thread->create_cancel_event ())
|
||||||
api_fatal ("couldn't create cancel event for main thread");
|
api_fatal ("couldn't create cancel event for main thread");
|
||||||
thread->postcreate ();
|
thread->postcreate ();
|
||||||
@ -247,20 +156,12 @@ pthread::self ()
|
|||||||
return pthread_null::get_null_pthread ();
|
return pthread_null::get_null_pthread ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
pthread::set_tls_self_pointer ()
|
|
||||||
{
|
|
||||||
MT_INTERFACE->thread_self_key.set (this);
|
|
||||||
}
|
|
||||||
|
|
||||||
pthread *
|
pthread *
|
||||||
pthread::get_tls_self_pointer ()
|
pthread::get_tls_self_pointer ()
|
||||||
{
|
{
|
||||||
return (pthread *) MT_INTERFACE->thread_self_key.get ();
|
return _my_tls.tid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
List<pthread> pthread::threads;
|
List<pthread> pthread::threads;
|
||||||
|
|
||||||
/* member methods */
|
/* member methods */
|
||||||
@ -1876,18 +1777,6 @@ verifyable_object_isvalid (void const * objectptr, long magic)
|
|||||||
return verifyable_object_isvalid (objectptr, magic, NULL);
|
return verifyable_object_isvalid (objectptr, magic, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void
|
|
||||||
__reent_t::init_clib (struct _reent& var)
|
|
||||||
{
|
|
||||||
var = ((struct _reent) _REENT_INIT (var));
|
|
||||||
var._stdin = _GLOBAL_REENT->_stdin;
|
|
||||||
var._stdout = _GLOBAL_REENT->_stdout;
|
|
||||||
var._stderr = _GLOBAL_REENT->_stderr;
|
|
||||||
var.__sdidinit = _GLOBAL_REENT->__sdidinit;
|
|
||||||
var.__cleanup = _GLOBAL_REENT->__cleanup;
|
|
||||||
_clib = &var;
|
|
||||||
};
|
|
||||||
|
|
||||||
DWORD WINAPI
|
DWORD WINAPI
|
||||||
pthread::thread_init_wrapper (void *arg)
|
pthread::thread_init_wrapper (void *arg)
|
||||||
{
|
{
|
||||||
@ -1897,32 +1786,14 @@ pthread::thread_init_wrapper (void *arg)
|
|||||||
exception_list cygwin_except_entry;
|
exception_list cygwin_except_entry;
|
||||||
init_exceptions (&cygwin_except_entry); /* Initialize SIGSEGV handling, etc. */
|
init_exceptions (&cygwin_except_entry); /* Initialize SIGSEGV handling, etc. */
|
||||||
|
|
||||||
thread->set_tls_self_pointer ();
|
|
||||||
struct __reent_t local_reent;
|
|
||||||
struct _winsup_t local_winsup;
|
|
||||||
struct _reent local_clib;
|
|
||||||
|
|
||||||
memset (&local_winsup, 0, sizeof (struct _winsup_t));
|
|
||||||
|
|
||||||
local_reent.init_clib (local_clib);
|
|
||||||
local_reent._winsup = &local_winsup;
|
|
||||||
|
|
||||||
local_winsup._process_logmask = LOG_UPTO (LOG_DEBUG);
|
|
||||||
|
|
||||||
MT_INTERFACE->reent_key.set (&local_reent);
|
|
||||||
|
|
||||||
thread->mutex.lock ();
|
thread->mutex.lock ();
|
||||||
|
|
||||||
// if thread is detached force cleanup on exit
|
// if thread is detached force cleanup on exit
|
||||||
if (thread->attr.joinable == PTHREAD_CREATE_DETACHED && thread->joiner == NULL)
|
if (thread->attr.joinable == PTHREAD_CREATE_DETACHED && thread->joiner == NULL)
|
||||||
thread->joiner = thread;
|
thread->joiner = thread;
|
||||||
thread->mutex.unlock ();
|
thread->mutex.unlock ();
|
||||||
|
|
||||||
#ifdef _CYG_THREAD_FAILSAFE
|
thread_printf ("started thread %p %p %p %p %p %p", arg, &_my_tls.local_clib,
|
||||||
if (_REENT == _impure_ptr)
|
|
||||||
system_printf ("local storage for thread isn't setup correctly");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
thread_printf ("started thread %p %p %p %p %p %p", arg, &local_clib,
|
|
||||||
_impure_ptr, thread, thread->function, thread->arg);
|
_impure_ptr, thread, thread->function, thread->arg);
|
||||||
|
|
||||||
// call the user's thread
|
// call the user's thread
|
||||||
@ -2394,7 +2265,7 @@ pthread_getschedparam (pthread_t thread, int *policy,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Thread SpecificData */
|
/* Thread Specific Data */
|
||||||
extern "C" int
|
extern "C" int
|
||||||
pthread_key_create (pthread_key_t *key, void (*destructor) (void *))
|
pthread_key_create (pthread_key_t *key, void (*destructor) (void *))
|
||||||
{
|
{
|
||||||
|
@ -22,106 +22,16 @@ details. */
|
|||||||
#define WRITE_LOCK 1
|
#define WRITE_LOCK 1
|
||||||
#define READ_LOCK 2
|
#define READ_LOCK 2
|
||||||
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
#if defined (_CYG_THREAD_FAILSAFE) && defined (_MT_SAFE)
|
|
||||||
void AssertResourceOwner (int, int);
|
|
||||||
#else
|
|
||||||
#define AssertResourceOwner(i,ii)
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef _MT_SAFE
|
|
||||||
|
|
||||||
#define SetResourceLock(i,n,c)
|
|
||||||
#define ReleaseResourceLock(i,n,c)
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <errno.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <pwd.h>
|
|
||||||
#include <grp.h>
|
|
||||||
#include <security.h>
|
#include <security.h>
|
||||||
#define _NOMNTENT_FUNCS
|
#include <errno.h>
|
||||||
#include <mntent.h>
|
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
|
|
||||||
struct _winsup_t
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
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;
|
|
||||||
DWORD available_drives;
|
|
||||||
char mnt_type[80];
|
|
||||||
char mnt_opts[80];
|
|
||||||
char mnt_fsname[CYG_MAX_PATH];
|
|
||||||
char mnt_dir[CYG_MAX_PATH];
|
|
||||||
|
|
||||||
/* strerror */
|
|
||||||
char _strerror_buf[20];
|
|
||||||
|
|
||||||
/* sysloc.cc */
|
|
||||||
char *_process_ident;
|
|
||||||
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;
|
|
||||||
struct protoent *_protoent_buf;
|
|
||||||
struct servent *_servent_buf;
|
|
||||||
struct hostent *_hostent_buf;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct __reent_t
|
|
||||||
{
|
|
||||||
struct _reent *_clib;
|
|
||||||
struct _winsup_t *_winsup;
|
|
||||||
void init_clib (_reent&);
|
|
||||||
};
|
|
||||||
|
|
||||||
_winsup_t *_reent_winsup ();
|
|
||||||
void SetResourceLock (int, int, const char *) __attribute__ ((regparm (3)));
|
void SetResourceLock (int, int, const char *) __attribute__ ((regparm (3)));
|
||||||
void ReleaseResourceLock (int, int, const char *)
|
void ReleaseResourceLock (int, int, const char *)
|
||||||
__attribute__ ((regparm (3)));
|
__attribute__ ((regparm (3)));
|
||||||
|
|
||||||
#ifdef _CYG_THREAD_FAILSAFE
|
|
||||||
void AssertResourceOwner (int, int);
|
|
||||||
#else
|
|
||||||
#define AssertResourceOwner(i,ii)
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class fast_mutex
|
class fast_mutex
|
||||||
@ -173,16 +83,9 @@ class pinfo;
|
|||||||
class ResourceLocks
|
class ResourceLocks
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ResourceLocks ()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
LPCRITICAL_SECTION Lock (int);
|
LPCRITICAL_SECTION Lock (int);
|
||||||
void Init ();
|
void Init ();
|
||||||
void Delete ();
|
void Delete ();
|
||||||
#ifdef _CYG_THREAD_FAILSAFE
|
|
||||||
DWORD owner;
|
|
||||||
DWORD count;
|
|
||||||
#endif
|
|
||||||
private:
|
private:
|
||||||
CRITICAL_SECTION lock;
|
CRITICAL_SECTION lock;
|
||||||
bool inited;
|
bool inited;
|
||||||
@ -770,36 +673,22 @@ struct MTinterface
|
|||||||
int concurrency;
|
int concurrency;
|
||||||
long int threadcount;
|
long int threadcount;
|
||||||
|
|
||||||
// Used for main thread data, and sigproc thread
|
|
||||||
struct __reent_t reents;
|
|
||||||
struct _winsup_t winsup_reent;
|
|
||||||
|
|
||||||
callback *pthread_prepare;
|
callback *pthread_prepare;
|
||||||
callback *pthread_child;
|
callback *pthread_child;
|
||||||
callback *pthread_parent;
|
callback *pthread_parent;
|
||||||
|
|
||||||
pthread_key reent_key;
|
|
||||||
pthread_key thread_self_key;
|
|
||||||
|
|
||||||
void Init ();
|
void Init ();
|
||||||
void fixup_before_fork (void);
|
void fixup_before_fork (void);
|
||||||
void fixup_after_fork (void);
|
void fixup_after_fork (void);
|
||||||
|
|
||||||
#if 1 // avoid initialization since zero is implied and
|
#if 0 // avoid initialization since zero is implied and
|
||||||
// only use of this class is static
|
|
||||||
MTinterface () : reent_key (NULL), thread_self_key (NULL) {}
|
|
||||||
#else
|
|
||||||
MTinterface () :
|
MTinterface () :
|
||||||
concurrency (0), threadcount (0),
|
concurrency (0), threadcount (0),
|
||||||
pthread_prepare (NULL), pthread_child (NULL), pthread_parent (NULL),
|
pthread_prepare (NULL), pthread_child (NULL), pthread_parent (NULL)
|
||||||
reent_key (NULL), thread_self_key (NULL)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MT_INTERFACE user_data->threadinterface
|
#define MT_INTERFACE user_data->threadinterface
|
||||||
|
|
||||||
#endif // MT_SAFE
|
|
||||||
|
|
||||||
#endif // _CYGNUS_THREADS_
|
#endif // _CYGNUS_THREADS_
|
||||||
|
@ -21,6 +21,7 @@ details. */
|
|||||||
#include "fhandler.h"
|
#include "fhandler.h"
|
||||||
#include "pinfo.h"
|
#include "pinfo.h"
|
||||||
#include "hires.h"
|
#include "hires.h"
|
||||||
|
#include "cygtls.h"
|
||||||
|
|
||||||
#define FACTOR (0x19db1ded53e8000LL)
|
#define FACTOR (0x19db1ded53e8000LL)
|
||||||
#define NSPERSEC 10000000LL
|
#define NSPERSEC 10000000LL
|
||||||
@ -118,11 +119,7 @@ settimeofday (const struct timeval *tv, const struct timezone *tz)
|
|||||||
extern "C" char *
|
extern "C" char *
|
||||||
timezone ()
|
timezone ()
|
||||||
{
|
{
|
||||||
#ifdef _MT_SAFE
|
char *b = _my_tls.locals.timezone_buf;
|
||||||
char *b=_reent_winsup ()->timezone_buf;
|
|
||||||
#else
|
|
||||||
static NO_COPY char b[20] = {0};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
tzset ();
|
tzset ();
|
||||||
__small_sprintf (b,"GMT%+d:%02d", (int) (-_timezone / 3600), (int) (abs (_timezone / 60) % 60));
|
__small_sprintf (b,"GMT%+d:%02d", (int) (-_timezone / 3600), (int) (abs (_timezone / 60) % 60));
|
||||||
@ -332,11 +329,7 @@ corelocaltime (const time_t * tim_p)
|
|||||||
int y;
|
int y;
|
||||||
int yleap;
|
int yleap;
|
||||||
_CONST int *ip;
|
_CONST int *ip;
|
||||||
#ifdef _MT_SAFE
|
struct tm &localtime_buf=_my_tls.locals.localtime_buf;
|
||||||
struct tm &localtime_buf=_reent_winsup ()->_localtime_buf;
|
|
||||||
#else
|
|
||||||
static NO_COPY struct tm localtime_buf = {0};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
time_t tim = *tim_p;
|
time_t tim = *tim_p;
|
||||||
struct tm *res = &localtime_buf;
|
struct tm *res = &localtime_buf;
|
||||||
|
@ -1,18 +1,20 @@
|
|||||||
//;# autogenerated: Do not edit.
|
//;# autogenerated: Do not edit.
|
||||||
|
|
||||||
//; $tls::func = -620;
|
//; $tls::func = -3084;
|
||||||
//; $tls::saved_errno = -616;
|
//; $tls::saved_errno = -3080;
|
||||||
//; $tls::sa_flags = -612;
|
//; $tls::sa_flags = -3076;
|
||||||
//; $tls::oldmask = -608;
|
//; $tls::oldmask = -3072;
|
||||||
//; $tls::newmask = -604;
|
//; $tls::newmask = -3068;
|
||||||
//; $tls::event = -600;
|
//; $tls::event = -3064;
|
||||||
//; $tls::errno_addr = -596;
|
//; $tls::errno_addr = -3060;
|
||||||
//; $tls::initialized = -592;
|
//; $tls::initialized = -3056;
|
||||||
//; $tls::sigmask = -588;
|
//; $tls::sigmask = -3052;
|
||||||
//; $tls::sigwait_mask = -584;
|
//; $tls::sigwait_mask = -3048;
|
||||||
//; $tls::sigwait_info = -580;
|
//; $tls::sigwait_info = -3044;
|
||||||
//; $tls::infodata = -576;
|
//; $tls::infodata = -3040;
|
||||||
//; $tls::tid = -52;
|
//; $tls::tid = -2516;
|
||||||
|
//; $tls::local_clib = -2512;
|
||||||
|
//; $tls::locals = -1584;
|
||||||
//; $tls::prev = -48;
|
//; $tls::prev = -48;
|
||||||
//; $tls::next = -44;
|
//; $tls::next = -44;
|
||||||
//; $tls::stack = -40;
|
//; $tls::stack = -40;
|
||||||
@ -20,19 +22,21 @@
|
|||||||
//; $tls::stackptr = -4;
|
//; $tls::stackptr = -4;
|
||||||
//; __DATA__
|
//; __DATA__
|
||||||
|
|
||||||
#define tls_func (-620)
|
#define tls_func (-3084)
|
||||||
#define tls_saved_errno (-616)
|
#define tls_saved_errno (-3080)
|
||||||
#define tls_sa_flags (-612)
|
#define tls_sa_flags (-3076)
|
||||||
#define tls_oldmask (-608)
|
#define tls_oldmask (-3072)
|
||||||
#define tls_newmask (-604)
|
#define tls_newmask (-3068)
|
||||||
#define tls_event (-600)
|
#define tls_event (-3064)
|
||||||
#define tls_errno_addr (-596)
|
#define tls_errno_addr (-3060)
|
||||||
#define tls_initialized (-592)
|
#define tls_initialized (-3056)
|
||||||
#define tls_sigmask (-588)
|
#define tls_sigmask (-3052)
|
||||||
#define tls_sigwait_mask (-584)
|
#define tls_sigwait_mask (-3048)
|
||||||
#define tls_sigwait_info (-580)
|
#define tls_sigwait_info (-3044)
|
||||||
#define tls_infodata (-576)
|
#define tls_infodata (-3040)
|
||||||
#define tls_tid (-52)
|
#define tls_tid (-2516)
|
||||||
|
#define tls_local_clib (-2512)
|
||||||
|
#define tls_locals (-1584)
|
||||||
#define tls_prev (-48)
|
#define tls_prev (-48)
|
||||||
#define tls_next (-44)
|
#define tls_next (-44)
|
||||||
#define tls_stack (-40)
|
#define tls_stack (-40)
|
||||||
|
@ -180,13 +180,7 @@ uinfo_init ()
|
|||||||
extern "C" char *
|
extern "C" char *
|
||||||
getlogin (void)
|
getlogin (void)
|
||||||
{
|
{
|
||||||
#ifdef _MT_SAFE
|
return strcpy (_my_tls.locals.username, cygheap->user.name ());
|
||||||
char *this_username=_reent_winsup ()->_username;
|
|
||||||
#else
|
|
||||||
static char this_username[UNLEN + 1] NO_COPY;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return strcpy (this_username, cygheap->user.name ());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" __uid32_t
|
extern "C" __uid32_t
|
||||||
|
Loading…
x
Reference in New Issue
Block a user