Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConrad Scott <conrad.scott@dsl.pipex.com>2002-08-27 16:28:37 +0400
committerConrad Scott <conrad.scott@dsl.pipex.com>2002-08-27 16:28:37 +0400
commit75d70fd945263649c4428fb165ebab1013a494bb (patch)
treec411dc2be626dde0c27ddfc00b000ddf0a2b08b2
parent647d3faf0d130f80dba8c6e78c6fb45528edd8f6 (diff)
Merged changes from HEAD
-rw-r--r--winsup/cygwin/ChangeLog43
-rw-r--r--winsup/cygwin/child_info.h11
-rw-r--r--winsup/cygwin/cygheap.cc1
-rw-r--r--winsup/cygwin/cygheap.h1
-rwxr-xr-xwinsup/cygwin/cygmagic10
-rw-r--r--winsup/cygwin/dcrt0.cc17
-rw-r--r--winsup/cygwin/fhandler_socket.cc22
-rw-r--r--winsup/cygwin/ioctl.cc3
-rw-r--r--winsup/cygwin/net.cc24
-rw-r--r--winsup/cygwin/shared_info.h4
10 files changed, 92 insertions, 44 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 0384c00aa..35fe35106 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,46 @@
+2002-08-26 Conrad Scott <conrad.scott@dsl.pipex.com>
+
+ * fhandler_socket.cc (fhandler_socket::check_peer_secret_event):
+ Fix strace message.
+ (fhandler_socket::connect): Remove sigframe.
+ (fhandler_socket::accept): Ditto.
+ (fhandler_socket::getsockname): Ditto.
+ (fhandler_socket::getpeername): Ditto.
+ (fhandler_socket::recvfrom): Ditto.
+ (fhandler_socket::recvmsg): Ditto.
+ (fhandler_socket::sendto): Ditto.
+ (fhandler_socket::sendmsg): Ditto.
+ (fhandler_socket::close): Ditto.
+ (fhandler_socket::ioctl): Ditto.
+ * ioctl.cc (ioctl): Add sigframe.
+ *net.cc (cygwin_sendto): Ditto.
+ (cygwin_recvfrom): Ditto.
+ (cygwin_recvfrom): Ditto.
+ (cygwin_connect): Ditto.
+ (cygwin_shutdown): Ditto.
+ (cygwin_getpeername): Ditto.
+ (cygwin_accept): Ditto. Improve strace message.
+ (cygwin_getsockname): Ditto. Ditto.
+ (cygwin_recvmsg): Ditto. Ditto.
+ (cygwin_sendmsg): Fix strace message.
+
+2002-08-27 Christopher Faylor <cgf@redhat.com>
+
+ * child_info.h: Add _PROC_WHOOPS enum value.
+ (CURR_CHILD_INFO_MAGIC): Update.
+ (child_info::magic): Make 'long'.
+ * cygheap.h: Export _cygheap_start.
+ * cygheap.cc: Don't declare _cygheap_start.
+ * cygmagic: Use cksum to produce checksums. Append 'U' to end of
+ checksum.
+ * dcrt0.cc (initial_env): Calculate sleep ms before reusing buffer.
+ (_dll_crt0): Detect cygheap mismatch as indicative of different cygwin
+ version. Set child_proc_info to NULL when _PROC_WHOOPS.
+ (multiple_cygwin_problem): If child_info specific problem, then set
+ child_proc_info type to _PROC_WHOOPS.
+ * shared_info.h (CURR_MOUNT_MAGIC): Update.
+ (CURR_SHARED_MAGIC): Ditto.
+
2002-08-25 Conrad Scott <conrad.scott@dsl.pipex.com>
* fhandler.h (fhandler_socket::recvfrom): Fix prototype.
diff --git a/winsup/cygwin/child_info.h b/winsup/cygwin/child_info.h
index 4b68e4281..1aca7247b 100644
--- a/winsup/cygwin/child_info.h
+++ b/winsup/cygwin/child_info.h
@@ -1,6 +1,6 @@
-/* childinfo.h: shared child info for cygwin
+/* child_info.h: shared child info for cygwin
- Copyright 2000, 2002 Red Hat, Inc.
+ Copyright 2000, 2001, 2002 Red Hat, Inc.
This file is part of Cygwin.
@@ -14,7 +14,8 @@ enum
{
_PROC_EXEC,
_PROC_SPAWN,
- _PROC_FORK
+ _PROC_FORK,
+ _PROC_WHOOPS
};
#define OPROC_MAGIC_MASK 0xff00ff00
@@ -28,7 +29,7 @@ enum
#define EXEC_MAGIC_SIZE sizeof(child_info)
-#define CURR_CHILD_INFO_MAGIC 0x8b3c
+#define CURR_CHILD_INFO_MAGIC 0xb3836013U
/* NOTE: Do not make gratuitous changes to the names or organization of the
below class. The layout is checksummed to determine compatibility between
@@ -39,7 +40,7 @@ public:
DWORD zero[4]; // must be zeroed
DWORD cb; // size of this record
DWORD intro; // improbable string
- unsigned short magic; // magic number unique to child_info
+ unsigned long magic; // magic number unique to child_info
unsigned short type; // type of record, exec, spawn, fork
int cygpid; // cygwin pid of child process
HANDLE subproc_ready; // used for synchronization with parent
diff --git a/winsup/cygwin/cygheap.cc b/winsup/cygwin/cygheap.cc
index 7ea7a39c3..937c3392c 100644
--- a/winsup/cygwin/cygheap.cc
+++ b/winsup/cygwin/cygheap.cc
@@ -45,7 +45,6 @@ struct cygheap_entry
extern "C" {
static void __stdcall _cfree (void *ptr) __attribute__((regparm(1)));
-extern void *_cygheap_start;
}
inline static void
diff --git a/winsup/cygwin/cygheap.h b/winsup/cygwin/cygheap.h
index 7cd5becbc..6f81eaa41 100644
--- a/winsup/cygwin/cygheap.h
+++ b/winsup/cygwin/cygheap.h
@@ -324,4 +324,5 @@ char *__stdcall cstrdup (const char *) __attribute__ ((regparm(1)));
char *__stdcall cstrdup1 (const char *) __attribute__ ((regparm(1)));
void __stdcall cfree_and_set (char *&, char * = NULL) __attribute__ ((regparm(2)));
void __stdcall cygheap_init ();
+extern DWORD _cygheap_start;
}
diff --git a/winsup/cygwin/cygmagic b/winsup/cygwin/cygmagic
index 387593878..a8ccc8c76 100755
--- a/winsup/cygwin/cygmagic
+++ b/winsup/cygwin/cygmagic
@@ -17,16 +17,14 @@ cat <<EOF > $file_magic
/* autogenerated - do not edit */
#include "$file"
EOF
-if sum -r /dev/null >/dev/null 2>&1; then
- sumit(){ sum -r $*; }
-else
- sumit(){ sum $*; }
-fi
+sumit() {
+ cksum $*
+}
while [ -n "$1" ]; do
define=$1; shift
struct=$1; shift
- sum=`$gcc -E $file | sed -n "/^$struct/,/^};/p" | sed -e 's/[ ]//g' -e '/^$/d' | sumit | awk '{printf "0x%x", $1}'`
+ sum=`$gcc -E $file | sed -n "/^$struct/,/^};/p" | sed -e 's/[ ]//g' -e '/^$/d' | sumit | awk '{printf "0x%xU", $1}'`
echo "#define $define $sum"
curr=`sed -n "s/^#[ ]*define CURR_$define[ ][ ]*\([^ ][^ ]*\)/\1/p" $file`
[ "$curr" != "$sum" ] && echo "*** WARNING WARNING WARNING WARNING WARNING ***
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index 8367bf3d9..cfc958330 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -792,10 +792,11 @@ initial_env ()
#ifdef DEBUGGING
if (GetEnvironmentVariable ("CYGWIN_SLEEP", buf, sizeof (buf) - 1))
{
+ DWORD ms = atoi (buf);
buf[0] = '\0';
len = GetModuleFileName (NULL, buf, MAX_PATH);
- console_printf ("Sleeping %d, pid %u %s\n", atoi (buf), GetCurrentProcessId (), buf);
- Sleep (atoi (buf));
+ console_printf ("Sleeping %d, pid %u %s\n", ms, GetCurrentProcessId (), buf);
+ Sleep (ms);
}
if (GetEnvironmentVariable ("CYGWIN_DEBUG", buf, sizeof (buf) - 1))
{
@@ -868,7 +869,11 @@ _dll_crt0 ()
multiple_cygwin_problem ("proc", child_proc_info->intro, 0);
else if (child_proc_info->intro == PROC_MAGIC_GENERIC
&& child_proc_info->magic != CHILD_INFO_MAGIC)
- multiple_cygwin_problem ("proc", child_proc_info->magic, CHILD_INFO_MAGIC);
+ multiple_cygwin_problem ("proc", child_proc_info->magic,
+ CHILD_INFO_MAGIC);
+ else if (child_proc_info->cygheap != (void *) &_cygheap_start)
+ multiple_cygwin_problem ("cygheap", (DWORD) child_proc_info->cygheap,
+ (DWORD) &_cygheap_start);
unsigned should_be_cb = 0;
switch (child_proc_info->type)
{
@@ -892,6 +897,8 @@ _dll_crt0 ()
}
default:
system_printf ("unknown exec type %d", child_proc_info->type);
+ /* intentionally fall through */
+ case _PROC_WHOOPS:
child_proc_info = NULL;
break;
}
@@ -1067,9 +1074,9 @@ __api_fatal (const char *fmt, ...)
void
multiple_cygwin_problem (const char *what, unsigned magic_version, unsigned version)
{
- if (_cygwin_testing && strstr (what, "proc"))
+ if (_cygwin_testing && (strstr (what, "proc") || strstr (what, "cygheap")))
{
- fork_info = NULL;
+ child_proc_info->type = _PROC_WHOOPS;
return;
}
diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc
index ded5935a1..2057a9eec 100644
--- a/winsup/cygwin/fhandler_socket.cc
+++ b/winsup/cygwin/fhandler_socket.cc
@@ -203,7 +203,7 @@ fhandler_socket::check_peer_secret_event (struct sockaddr_in* peer, int* secret)
ev = CreateEvent (&sec_all_nih, FALSE, FALSE, buf);
if (!ev && GetLastError () == ERROR_ALREADY_EXISTS)
{
- debug_printf ("%s event already exist");
+ debug_printf ("event \"%s\" already exists", buf);
ev = OpenEvent (EVENT_ALL_ACCESS, FALSE, buf);
}
@@ -406,8 +406,6 @@ fhandler_socket::connect (const struct sockaddr *name, int namelen)
sockaddr_in sin;
int secret [4];
- sigframe thisframe (mainthread);
-
if (!get_inet_addr (name, namelen, &sin, &namelen, secret))
return -1;
@@ -486,8 +484,6 @@ fhandler_socket::accept (struct sockaddr *peer, int *len)
BOOL secret_check_failed = FALSE;
BOOL in_progress = FALSE;
- sigframe thisframe (mainthread);
-
/* Allows NULL peer and len parameters. */
struct sockaddr_in peer_dummy;
int len_dummy;
@@ -624,8 +620,6 @@ fhandler_socket::getsockname (struct sockaddr *name, int *namelen)
{
int res = -1;
- sigframe thisframe (mainthread);
-
if (get_addr_family () == AF_LOCAL)
{
struct sockaddr_un *sun = (struct sockaddr_un *) name;
@@ -659,8 +653,6 @@ fhandler_socket::getsockname (struct sockaddr *name, int *namelen)
int
fhandler_socket::getpeername (struct sockaddr *name, int *namelen)
{
- sigframe thisframe (mainthread);
-
int res = ::getpeername (get_socket (), name, namelen);
if (res)
set_winsock_errno ();
@@ -682,8 +674,6 @@ fhandler_socket::recvfrom (void *ptr, size_t len, int flags,
wsock_event wsock_evt;
LPWSAOVERLAPPED ovr;
- sigframe thisframe (mainthread);
-
if (is_nonblocking () || !(ovr = wsock_evt.prepare ()))
{
debug_printf ("Fallback to winsock 1 recvfrom call");
@@ -723,8 +713,6 @@ fhandler_socket::recvmsg (struct msghdr *msg, int flags)
char *buf, *p;
struct iovec *iov = msg->msg_iov;
- sigframe thisframe (mainthread);
-
if (get_addr_family () == AF_LOCAL)
{
/* On AF_LOCAL sockets the (fixed-size) name of the shared memory
@@ -771,8 +759,6 @@ fhandler_socket::sendto (const void *ptr, size_t len, int flags,
LPWSAOVERLAPPED ovr;
sockaddr_in sin;
- sigframe thisframe (mainthread);
-
if (to && !get_inet_addr (to, tolen, &sin, &tolen))
return -1;
@@ -844,8 +830,6 @@ fhandler_socket::sendmsg (const struct msghdr *msg, int flags)
int
fhandler_socket::shutdown (int how)
{
- sigframe thisframe (mainthread);
-
int res = ::shutdown (get_socket (), how);
if (res)
@@ -872,8 +856,6 @@ fhandler_socket::close ()
{
int res = 0;
- sigframe thisframe (mainthread);
-
/* HACK to allow a graceful shutdown even if shutdown() hasn't been
called by the application. Note that this isn't the ultimate
solution but it helps in many cases. */
@@ -916,8 +898,6 @@ fhandler_socket::ioctl (unsigned int cmd, void *p)
struct ifconf ifc, *ifcp;
struct ifreq *ifr, *ifrp;
- sigframe thisframe (mainthread);
-
switch (cmd)
{
case SIOCGIFCONF:
diff --git a/winsup/cygwin/ioctl.cc b/winsup/cygwin/ioctl.cc
index 2f96e8508..6b12a2ec3 100644
--- a/winsup/cygwin/ioctl.cc
+++ b/winsup/cygwin/ioctl.cc
@@ -20,11 +20,14 @@ details. */
#include "path.h"
#include "dtable.h"
#include "cygheap.h"
+#include "sigproc.h"
#include <sys/termios.h>
extern "C" int
ioctl (int fd, int cmd, ...)
{
+ sigframe thisframe (mainthread);
+
cygheap_fdget cfd (fd);
if (cfd < 0)
return -1;
diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc
index 888c34ecc..aa52a3cd5 100644
--- a/winsup/cygwin/net.cc
+++ b/winsup/cygwin/net.cc
@@ -568,6 +568,8 @@ cygwin_sendto (int fd, const void *buf, int len, int flags,
const struct sockaddr *to, int tolen)
{
int res;
+ sigframe thisframe (mainthread);
+
fhandler_socket *fh = get (fd);
if ((len && __check_invalid_read_ptr_errno (buf, (unsigned) len))
@@ -589,6 +591,8 @@ cygwin_recvfrom (int fd, void *buf, int len, int flags,
struct sockaddr *from, int *fromlen)
{
int res;
+ sigframe thisframe (mainthread);
+
fhandler_socket *fh = get (fd);
if ((len && __check_null_invalid_struct_errno (buf, (unsigned) len))
@@ -742,6 +746,8 @@ extern "C" int
cygwin_connect (int fd, const struct sockaddr *name, int namelen)
{
int res;
+ sigframe thisframe (mainthread);
+
fhandler_socket *fh = get (fd);
if (__check_invalid_read_ptr_errno (name, namelen) || !fh)
@@ -1002,6 +1008,8 @@ extern "C" int
cygwin_accept (int fd, struct sockaddr *peer, int *len)
{
int res;
+ sigframe thisframe (mainthread);
+
fhandler_socket *fh = get (fd);
if ((peer && (check_null_invalid_struct_errno (len)
@@ -1011,7 +1019,7 @@ cygwin_accept (int fd, struct sockaddr *peer, int *len)
else
res = fh->accept (peer, len);
- syscall_printf ("%d = accept (%d, %p, %d)", res, fd, peer, len);
+ syscall_printf ("%d = accept (%d, %p, %p)", res, fd, peer, len);
return res;
}
@@ -1036,6 +1044,8 @@ extern "C" int
cygwin_getsockname (int fd, struct sockaddr *addr, int *namelen)
{
int res;
+ sigframe thisframe (mainthread);
+
fhandler_socket *fh = get (fd);
if (check_null_invalid_struct_errno (namelen)
@@ -1045,7 +1055,7 @@ cygwin_getsockname (int fd, struct sockaddr *addr, int *namelen)
else
res = fh->getsockname (addr, namelen);
- syscall_printf ("%d = getsockname (%d, %p, %d)", res, fd, addr, namelen);
+ syscall_printf ("%d = getsockname (%d, %p, %p)", res, fd, addr, namelen);
return res;
}
@@ -1070,6 +1080,8 @@ extern "C" int
cygwin_shutdown (int fd, int how)
{
int res;
+ sigframe thisframe (mainthread);
+
fhandler_socket *fh = get (fd);
if (!fh)
@@ -1133,6 +1145,8 @@ extern "C" int
cygwin_getpeername (int fd, struct sockaddr *name, int *len)
{
int res;
+ sigframe thisframe (mainthread);
+
fhandler_socket *fh = get (fd);
if (check_null_invalid_struct_errno (len)
@@ -2087,6 +2101,8 @@ extern "C" int
cygwin_recvmsg (int fd, struct msghdr *msg, int flags)
{
int res;
+ sigframe thisframe (mainthread);
+
fhandler_socket *fh = get (fd);
if (check_null_invalid_struct_errno (msg)
@@ -2098,7 +2114,7 @@ cygwin_recvmsg (int fd, struct msghdr *msg, int flags)
else
res = fh->recvmsg (msg, flags);
- syscall_printf ("%d = recvmsg (%d, %p, %d)", res, fd, msg, flags);
+ syscall_printf ("%d = recvmsg (%d, %p, %x)", res, fd, msg, flags);
return res;
}
@@ -2118,6 +2134,6 @@ cygwin_sendmsg (int fd, const struct msghdr *msg, int flags)
else
res = fh->sendmsg (msg, flags);
- syscall_printf ("%d = recvmsg (%d, %p, %d)", res, fd, msg, flags);
+ syscall_printf ("%d = sendmsg (%d, %p, %x)", res, fd, msg, flags);
return res;
}
diff --git a/winsup/cygwin/shared_info.h b/winsup/cygwin/shared_info.h
index 02a12fff5..945bc17a6 100644
--- a/winsup/cygwin/shared_info.h
+++ b/winsup/cygwin/shared_info.h
@@ -41,7 +41,7 @@ class mount_item
#define MOUNT_VERSION 27 // increment when mount table changes and
#define MOUNT_VERSION_MAGIC CYGWIN_VERSION_MAGIC (MOUNT_MAGIC, MOUNT_VERSION)
-#define CURR_MOUNT_MAGIC 0xf4e5
+#define CURR_MOUNT_MAGIC 0x4fe431cdU
#define MOUNT_INFO_CB 16488
class reg_key;
@@ -138,7 +138,7 @@ public:
#define SHARED_INFO_CB 47112
-#define CURR_SHARED_MAGIC 0x88e
+#define CURR_SHARED_MAGIC 0x29eb8ccdU
/* NOTE: Do not make gratuitous changes to the names or organization of the
below class. The layout is checksummed to determine compatibility between