* Makefile.in (DLL_OFILES): Add sigfe.o. Remove reliance on cygwin.def from cygwin0.dll dependency since dependence on sigfe.o implies that. Generate def file on the fly using 'gendef'. * configure.in: Don't auto-generate cygwin.def. * configure: Regenerate. * cygwin.din: Add SIGFE stuff where appropriate. * dcrt0.cc (dll_crt0_1): Initialize cygwin tls early in process startup. Set _main_tls to address of the main thread's cygwin tls. * debug.h: Remove now unneeded WFSO and WFMO declarations. * exceptions.cc (_last_thread): Define. (set_thread_state_for_signals): New function. (reset_thread_exception_for_signals): Ditto. (init_thread_for_signals): Ditto. (delete_thread_for_signals): Ditto. (capture_thread_for_signals): Ditto. (handle_exceptions): Set return address explicitly for exceptions prior to calling sig_send. (interrupt_on_return): Eliminate. (setup_handler): Add preliminary implementation for dealing with thread-specific signals by querying _main_tls. (signal_exit): Use cygthread::main_thread_id instead of mainthread.id. (call_signal_handler_now): For now, just handle the main thread. * fork.cc (vfork): Save and restore main _my_tls. * gendef: New file. Generates def file and sigfe.s file. * gentls_offsets: New file. Generates offsets for perl to use in sigfe.s. * how-signals-work.txt: Mention that info is obsolete. * init.cc (dll_entry): Initialize cygwin tls storage here. * miscfuncs.cc (low_priority_sleep): Make a C function for easier calling from asm. * perthread.h (vfork_save::tls): New element. * signal.cc (nanosleep): Replace previous use of sigframe.call_signal_handler_now with straight call to call_signal_handler_now. (abort): Ditto. * syscalls.cc (readv): Ditto. * termios.cc (tcsetattr): Ditto. * wait.cc (wait4): Ditto. * sigproc.cc (sig_dispatch_pending): Ditto. (sig_send): Ditto. * sigproc.h: Declare call_signal_handler_now. * thread.cc (pthread::thread_init_wrapper): Initialize cygwin tls. Remove obsolete and unworking signal stuff. * thread.h (verifyable_object::sigs): Eliminate. (verifyable_object::sigmask): Eliminate. (verifyable_object::sigtodo): Eliminate. (verifyable_object::exit): Make attribute noreturn. (verifyable_object::thread_init_wrapper): Ditto. (pthread_null::exit): Ditto. * winbase.h (__stackbase): Always define. * winsup.h (low_priority_sleep): Declare as a "C" function. * include/cygwin/version.h: Bump API version to reflect sigwait export. * include/sys/queue.h: Protect SLIST_ENTRY from previous declaration. * signal.cc (sigwait): Implement. * select.cc (fhandler_base::ready_for_read): Add debugging output. * devices.h: Define more device pointers via their storage. * devices.in: Don't parse things like /dev/inet/tcp, as they really have no meaning. * devices.cc: Regenerate. * gendevices: Set proper protection for output file. * cygtls.h: New file. * gendef: New file. * gentls_offsets: New file. * tlsoffsets.h: New file. Autogenerated. * config/i386/longjmp.c: Remove. File subsumed by gendef output. * config/i386/makefrag: Remove obsolete file. * fhandler.cc: Remove spurious access_worker declaration. * spawn.cc (spawnve): Make debugging output more accurate. * cygwin-gperf: Remove. * devices.cc: Remove.
305 lines
13 KiB
C
305 lines
13 KiB
C
/* version.h -- Cygwin version numbers and accompanying documentation.
|
|
|
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Red Hat, Inc.
|
|
|
|
This file is part of Cygwin.
|
|
|
|
This software is a copyrighted work licensed under the terms of the
|
|
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
|
|
details. */
|
|
|
|
/* Cygwin versioning is relatively complicated because of its status
|
|
as a shared library. Let's start with how versioning used to be done.
|
|
|
|
Historical versioning in Cygwin 16.0 to 19.5:
|
|
|
|
In the olden days of Cygwin, we had a dll major and minor version
|
|
and a registry version. The major number started at 16 because the
|
|
"b15" GNU-Win32 release of the compiler tools was out when this
|
|
scheme was started. We incremented the DLL name frequently (for
|
|
every official release) and towards the end of this period every
|
|
release used a different shared memory area to prevent DLLs from
|
|
interfering with each other (embedding a build timestamp into the
|
|
name of the shared memory area). This turned out to be a Bad Idea
|
|
(tm) because people needed to mingle separate releases and have
|
|
them work together more than we thought they would. This was
|
|
especially problematic when tty info needed to be retained when an
|
|
old Cygwin executable executed a newer one.
|
|
|
|
In the old scheme, we incremented the major number whenever a
|
|
change to the dll invalidated existing executables. This can
|
|
happen for a number of reasons, including when functions are
|
|
removed from the export list of the dll. The minor number was
|
|
incremented when a change was made that we wanted to record, but
|
|
that didn't invalidate existing executables. Both numbers were
|
|
recorded in the executable and in the dll.
|
|
|
|
In October 1998 (starting with Cygwin 19.6), we started a new
|
|
means of Cygwin versioning: */
|
|
|
|
/* The DLL major and minor numbers correspond to the "version of
|
|
the Cygwin library". This version is used to track important
|
|
changes to the DLL and is mainly informative in nature. */
|
|
|
|
#define CYGWIN_VERSION_DLL_MAJOR 1005
|
|
#define CYGWIN_VERSION_DLL_MINOR 6
|
|
|
|
/* Major numbers before CYGWIN_VERSION_DLL_EPOCH are
|
|
incompatible. */
|
|
|
|
#define CYGWIN_VERSION_DLL_EPOCH 19
|
|
|
|
/* CYGWIN_VERSION_DLL_COMBINED gives us a single number
|
|
representing the combined DLL major and minor numbers. */
|
|
|
|
/* WATCH OUT FOR OCTAL! Don't use, say, "00020" for 0.20 */
|
|
|
|
#define CYGWIN_VERSION_DLL_MAKE_COMBINED(maj, min) (((maj) * 1000) + min)
|
|
#define CYGWIN_VERSION_DLL_COMBINED \
|
|
CYGWIN_VERSION_DLL_MAKE_COMBINED (CYGWIN_VERSION_DLL_MAJOR, CYGWIN_VERSION_DLL_MINOR)
|
|
|
|
/* Every version of cygwin <= this uses an old, incorrect method
|
|
to determine signal masks. */
|
|
|
|
#define CYGWIN_VERSION_DLL_BAD_SIGNAL_MASK 19005
|
|
|
|
/* API versions <= this had a termios structure whose members were
|
|
too small to accomodate modern settings. */
|
|
#define CYGWIN_VERSION_DLL_OLD_TERMIOS 5
|
|
#define CYGWIN_VERSION_DLL_IS_OLD_TERMIOS \
|
|
(CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) <= \
|
|
CYGWIN_VERSION_DLL_OLD_TERMIOS)
|
|
|
|
#define CYGWIN_VERSION_DLL_MALLOC_ENV 28
|
|
/* Old APIs had getc/putc macros that conflict with new CR/LF
|
|
handling in the stdio buffers */
|
|
#define CYGWIN_VERSION_OLD_STDIO_CRLF_HANDLING \
|
|
(CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) <= \
|
|
20)
|
|
|
|
#define CYGWIN_VERSION_CHECK_FOR_S_IEXEC \
|
|
(CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) >= \
|
|
36)
|
|
|
|
#define CYGWIN_VERSION_CHECK_FOR_OLD_O_NONBLOCK \
|
|
(CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) <= \
|
|
28)
|
|
|
|
#define CYGWIN_VERSION_CHECK_FOR_USING_BIG_TYPES \
|
|
(CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) >= \
|
|
79)
|
|
/* We used to use the DLL major/minor to track
|
|
non-backward-compatible interface changes to the API. Now we
|
|
use an API major/minor number for this purpose. */
|
|
|
|
/* API_MAJOR 0.0: Initial version. API_MINOR changes:
|
|
1: Export cygwin32_ calls as cygwin_ as well.
|
|
2: Export j1, jn, y1, yn.
|
|
3: Export dll_noncygwin_dllcrt0.
|
|
4: New socket ioctls, revamped ifconf support.
|
|
5: Thread support/exports.
|
|
6: Change in termios handling.
|
|
7: Export scandir and alphasort.
|
|
8: Export _ctype_, _sys_errlist, _sys_nerr.
|
|
9: Mount-related changes, new cygwin_umount export.
|
|
Raw device support (tape, floppies).
|
|
10: Fast math routine support added.
|
|
11: Export seekdir, telldir.
|
|
12: Export pthread_join, pthread_detach.
|
|
13: Export math funcs gamma and friends, also _j0, _j1, etc.
|
|
14: Export snprintf and vnsprintf.
|
|
15: Export glob
|
|
16: Export cygwin_stackdump
|
|
17: Export fast math stuff
|
|
18: Stop exporting _strace_wm
|
|
19: Export fchown, lchown, lacl
|
|
20: regsub, inet_network
|
|
21: incompatible change to stdio cr/lf and buffering
|
|
22: Export cygwin_logon_user, cygwin_set_impersonation_token.
|
|
geteuid, getegid return effective uid/gid.
|
|
getuid, getgid return real uid/gid.
|
|
seteuid, setegid set only effective uid/gid.
|
|
setuid, setgid set effective and real uid/gid.
|
|
23: Export new dll_crt0 interface and cygwin_user_data for use
|
|
with crt0 startup code.
|
|
24: Export poll and _poll.
|
|
25: Export getmode and _getmode.
|
|
26: CW_GET_CYGDRIVE_PREFIXES addition to external.cc
|
|
27: CW_GETPINFO_FULL addition to external.cc
|
|
28: Accidentally bumped by cgf
|
|
29: Export hstrerror
|
|
30: CW_GET_CYGDRIVE_INFO addition to external.cc
|
|
31: Export inet_aton
|
|
32: Export getrlimit/setrlimit
|
|
33: Export setlogmask
|
|
34: Separated out mount table
|
|
35: Export drand48, erand48, jrand48, lcong48, lrand48,
|
|
mrand48, nrand48, seed48, and srand48.
|
|
36: Added _cygwin_S_IEXEC, et al
|
|
37: [f]pathconv support _PC_POSIX_PERMISSIONS and _PC_POSIX_SECURITY
|
|
38: vscanf, vscanf_r, and random pthread functions
|
|
39: asctime_r, ctime_r, gmtime_r, localtime_r
|
|
40: fchdir
|
|
41: __signgam
|
|
42: sys_errlist, sys_nerr
|
|
43: sigsetjmp, siglongjmp fixed
|
|
44: Export dirfd
|
|
45: perprocess change, gamma_r, gammaf_r, lgamma_r, lgammaf_r
|
|
46: Remove cygwin_getshared
|
|
47: Report EOTWarningZoneSize in struct mtget.
|
|
48: Export "posix" regex functions
|
|
49: Export setutent, endutent, utmpname, getutent, getutid, getutline.
|
|
50: Export fnmatch.
|
|
51: Export recvmsg, sendmsg.
|
|
52: Export strptime
|
|
53: Export strlcat, strlcpy.
|
|
54: Export __fpclassifyd, __fpclassifyf, __signbitd, __signbitf.
|
|
55: Export fcloseall, fcloseall_r.
|
|
56: Make ntsec on by default.
|
|
57: Export setgroups.
|
|
58: Export memalign, valloc, malloc_trim, malloc_usable_size, mallopt,
|
|
malloc_stats
|
|
59: getsid
|
|
60: MSG_NOSIGNAL
|
|
61: Export getc_unlocked, getchar_unlocked, putc_unlocked,
|
|
putchar_unlocked
|
|
62: Erroneously bumped
|
|
63: Export pututline
|
|
64: Export fseeko, ftello
|
|
65: Export siginterrupt
|
|
66: Export nl_langinfo
|
|
67: Export pthread_getsequence_np
|
|
68: Export netdb stuff
|
|
69: Export strtof
|
|
70: Export asprintf, _asprintf_r, vasprintf, _vasprintf_r
|
|
71: Export strerror_r
|
|
72: Export nanosleep
|
|
73: Export setreuid32, setreuid, setregid32, setregid
|
|
74: Export _strtold a64l hcreate hcreate_r hdestroy hdestroy_r hsearch
|
|
hsearch_r isblank iswalnum iswalpha iswblank iswcntrl iswctype
|
|
iswdigit iswgraph iswlower iswprint iswpunct iswspace iswupper
|
|
iswxdigit l64a mbrlen mbrtowc mbsinit mbsrtowcs mempcpy
|
|
on_exit setbuffer setlinebuf strndup strnlen tdelete tdestroy
|
|
tfind towctrans towlower towupper tsearch twalk wcrtomb wcscat
|
|
wcschr wcscpy wcscspn wcslcat wcslcpy wcsncat wcsncmp wcsncpy
|
|
wcspbrk wcsrchr wcsrtombs wcsspn wcsstr wctob wctob wctrans
|
|
wctype wmemchr wmemcmp wmemcpy wmemmove wmemset
|
|
75: Export exp2 exp2f fdim fdimf fma fmaf fmax fmaxf fmin fminf lrint
|
|
lrintf lround lroundf nearbyint nearbyintf remquo remquof
|
|
round roundf scalbln scalblnf sincos sincosf tgamma tgammaf
|
|
truncf
|
|
76: mallinfo
|
|
77: thread-safe exit/at_exit
|
|
78: Use stat and fstat rather than _stat, and _fstat.
|
|
Export btowc and trunc.
|
|
79: Export acl32 aclcheck32 aclfrommode32 aclfrompbits32 aclfromtext32
|
|
aclsort32 acltomode32 acltopbits32 acltotext32 facl32
|
|
fgetpos64 fopen64 freopen64 fseeko64 fsetpos64 ftello64
|
|
_open64 _lseek64 _fstat64 _stat64 mknod32
|
|
80: Export pthread_rwlock stuff
|
|
81: CW_CHECK_NTSEC addition to external.cc
|
|
82: Export wcscoll wcswidth wcwidth
|
|
83: Export gethostid
|
|
84: Pty open allocates invisible console. 64 bit interface
|
|
85: Export new 32/64 functions from API 0.79 only with leading
|
|
underscore. No problems with backward compatibility since no
|
|
official release has been made so far. This change removes
|
|
exported symbols like fopen64, which might confuse configure.
|
|
86: Export ftok
|
|
87: Export vsyslog
|
|
88: Export _getreent
|
|
89: Export __mempcpy
|
|
90: Export _fopen64
|
|
91: Export argz_add argz_add_sep argz_append argz_count argz_create
|
|
argz_create_sep argz_delete argz_extract argz_insert
|
|
argz_next argz_replace argz_stringify envz_add envz_entry
|
|
envz_get envz_merge envz_remove envz_strip
|
|
92: Export getusershell, setusershell, endusershell
|
|
93: Export daemon, forkpty, openpty, iruserok, ruserok, login_tty,
|
|
openpty, forkpty, revoke, logwtmp, updwtmp
|
|
94: Export getopt, getopt_long, optarg, opterr, optind, optopt,
|
|
optreset, __check_rhosts_file, __rcmd_errstr.
|
|
95: Export shmat, shmctl, shmdt, shmget.
|
|
96: CW_GET_ERRNO_FROM_WINERROR addition to external.cc
|
|
97: Export sem_open, sem_close, sem_timedwait, sem_getvalue.
|
|
98: Export _tmpfile64.
|
|
99: CW_GET_POSIX_SECURITY_ATTRIBUTE addition to external.cc.
|
|
100: CW_GET_SHMLBA addition to external.cc.
|
|
101: Export err, errx, verr, verrx, warn, warnx, vwarn, vwarnx.
|
|
102: CW_GET_UID_FROM_SID and CW_GET_GID_FROM_SID addition to external.cc.
|
|
103: Export getprogname, setprogname.
|
|
104: Export msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop.
|
|
105: Export sigwait.
|
|
*/
|
|
|
|
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
|
|
|
|
#define CYGWIN_VERSION_API_MAJOR 0
|
|
#define CYGWIN_VERSION_API_MINOR 105
|
|
|
|
/* There is also a compatibity version number associated with the
|
|
shared memory regions. It is incremented when incompatible
|
|
changes are made to the shared memory region *or* to any named
|
|
shared mutexes, semaphores, etc. The arbitrary starting
|
|
version was 0 (cygwin release 98r2). */
|
|
|
|
#define CYGWIN_VERSION_SHARED_DATA 3
|
|
|
|
/* An identifier used in the names used to create shared objects.
|
|
The full names include the CYGWIN_VERSION_SHARED_DATA version
|
|
as well as this identifier. */
|
|
|
|
#define CYGWIN_VERSION_DLL_IDENTIFIER "cygwin1"
|
|
|
|
/* The Cygwin mount table interface in the Win32 registry also
|
|
has a version number associated with it in case that is
|
|
changed in a non-backwards compatible fashion. Increment this
|
|
version number whenever incompatible changes in mount table
|
|
registry usage are made.
|
|
|
|
1: Original number version.
|
|
2: New mount registry layout, system-wide mount accessibility.
|
|
*/
|
|
|
|
#define CYGWIN_VERSION_MOUNT_REGISTRY 2
|
|
|
|
/* Identifiers used in the Win32 registry. */
|
|
|
|
#define CYGWIN_INFO_CYGNUS_REGISTRY_NAME "Cygnus Solutions"
|
|
#define CYGWIN_INFO_CYGWIN_REGISTRY_NAME "Cygwin"
|
|
#define CYGWIN_INFO_PROGRAM_OPTIONS_NAME "Program Options"
|
|
#define CYGWIN_INFO_CYGWIN_MOUNT_REGISTRY_NAME "mounts v2"
|
|
#define CYGWIN_INFO_CYGDRIVE_FLAGS "cygdrive flags"
|
|
#define CYGWIN_INFO_CYGDRIVE_PREFIX "cygdrive prefix"
|
|
#define CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX "/cygdrive"
|
|
|
|
/* In addition to the above version number strings, the build
|
|
process adds some strings that may be useful in
|
|
debugging/identifying a particular Cygwin DLL:
|
|
|
|
The mkvers.sh script at the top level produces a .cc file
|
|
which initializes a cygwin_version structure based on the
|
|
above version information and creates a string table for
|
|
grepping via "fgrep '%%%' cygwinwhatever.dll" if you are
|
|
using GNU grep. Otherwise you may want to do a
|
|
"strings cygwinwhatever.dll | fgrep '%%%'" instead.
|
|
|
|
This will produce output such as:
|
|
|
|
%%% Cygwin dll_identifier: cygwin
|
|
%%% Cygwin api_major: 0
|
|
%%% Cygwin api_minor: 0
|
|
%%% Cygwin dll_major: 19
|
|
%%% Cygwin dll_minor: 6
|
|
%%% Cygwin shared_data: 1
|
|
%%% Cygwin registry: b15
|
|
%%% Cygwin build date: Wed Oct 14 16:26:51 EDT 1998
|
|
%%% Cygwin shared id: cygwinS1
|
|
|
|
This information can also be obtained through a call to
|
|
cygwin_internal (CW_GETVERSIONINFO).
|
|
*/
|
|
|
|
#define CYGWIN_VERSION_MAGIC(a, b) ((unsigned) ((((unsigned short) a) << 16) | (unsigned short) b))
|
|
#define CYGWIN_VERSION_MAGIC_VERSION(a) ((unsigned) ((unsigned)a & 0xffff))
|