* cygheap.h (struct init_cygheap): Remove shared_h and mt_h members.

* fhandler_tape.cc (mt): Define as DLL shared area in
	.cygwin_dll_common instead of as dynamically allocated area.
	Change referencing throughout.
	* mtinfo.h (mt_h): Remove entirely.
	(mt): Remove extern declaration.
	* shared.cc (cygwin_shared_area): New global cygwin_shared
	variable located in .cygwin_dll_common.
	(offsets): Define shared region addresses descending from
	cygwin_shared_address.
	(open_shared): Replace usage of SH_CYGWIN_SHARED by SH_USER_SHARED.
	(memory_init): Set cygwin_shared just by pointing to cygwin_shared_area.
	* shared_info.h (shared_locations): Remove SH_CYGWIN_SHARED and
	SH_MTINFO.
	(cygwin_shared_address): Define as DLL start address.
	* tty.h (tty_min::tty_min): Remove constructor.
This commit is contained in:
Corinna Vinschen 2006-07-26 15:59:39 +00:00
parent 020a7b4711
commit 5faa48850f
7 changed files with 51 additions and 61 deletions

View File

@ -1,3 +1,22 @@
2006-07-26 Corinna Vinschen <corinna@vinschen.de>
* cygheap.h (struct init_cygheap): Remove shared_h and mt_h members.
* fhandler_tape.cc (mt): Define as DLL shared area in
.cygwin_dll_common instead of as dynamically allocated area.
Change referencing throughout.
* mtinfo.h (mt_h): Remove entirely.
(mt): Remove extern declaration.
* shared.cc (cygwin_shared_area): New global cygwin_shared
variable located in .cygwin_dll_common.
(offsets): Define shared region addresses descending from
cygwin_shared_address.
(open_shared): Replace usage of SH_CYGWIN_SHARED by SH_USER_SHARED.
(memory_init): Set cygwin_shared just by pointing to cygwin_shared_area.
* shared_info.h (shared_locations): Remove SH_CYGWIN_SHARED and
SH_MTINFO.
(cygwin_shared_address): Define as DLL start address.
* tty.h (tty_min::tty_min): Remove constructor.
2006-07-25 Corinna Vinschen <corinna@vinschen.de> 2006-07-25 Corinna Vinschen <corinna@vinschen.de>
* include/cygwin/in6.h: Guard in_port_t typedef more restrictive to * include/cygwin/in6.h: Guard in_port_t typedef more restrictive to

View File

@ -1,6 +1,6 @@
/* cygheap.h: Cygwin heap manager. /* cygheap.h: Cygwin heap manager.
Copyright 2000, 2001, 2002, 2003, 2004, 2005 Red Hat, Inc. Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -279,9 +279,7 @@ struct init_cygheap
cygheap_user user; cygheap_user user;
user_heap_info user_heap; user_heap_info user_heap;
mode_t umask; mode_t umask;
HANDLE shared_h;
HANDLE console_h; HANDLE console_h;
HANDLE mt_h;
cwdstuff cwd; cwdstuff cwd;
dtable fdtab; dtable fdtab;
LUID luid[SE_NUM_PRIVS]; LUID luid[SE_NUM_PRIVS];

View File

@ -1,7 +1,7 @@
/* fhandler_tape.cc. See fhandler.h for a description of the fhandler /* fhandler_tape.cc. See fhandler.h for a description of the fhandler
classes. classes.
Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005 Red Hat, Inc. Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -1159,15 +1159,12 @@ mtinfo::initialize ()
} }
} }
mtinfo *mt; static mtinfo mt __attribute__((section (".cygwin_dll_common"), shared));
void __stdcall void __stdcall
mtinfo_init () mtinfo_init ()
{ {
shared_locations sh_mtinfo = SH_MTINFO; mt.initialize ();
mt = (mtinfo *) open_shared ("mtinfo", MTINFO_VERSION, cygheap->mt_h, sizeof (mtinfo), sh_mtinfo);
ProtectHandleINH (cygheap->mt_h);
mt->initialize ();
} }
/**********************************************************************/ /**********************************************************************/
@ -1223,22 +1220,22 @@ fhandler_dev_tape::open (int flags, mode_t)
into O_SYNC, which controls the FILE_WRITE_THROUGH flag in the into O_SYNC, which controls the FILE_WRITE_THROUGH flag in the
NtCreateFile call in fhandler_base::open. */ NtCreateFile call in fhandler_base::open. */
flags &= ~O_SYNC; flags &= ~O_SYNC;
if (!mt->drive (driveno ())->buffer_writes ()) if (!mt.drive (driveno ())->buffer_writes ())
flags |= O_SYNC; flags |= O_SYNC;
ret = fhandler_dev_raw::open (flags); ret = fhandler_dev_raw::open (flags);
if (ret) if (ret)
{ {
mt->drive (driveno ())->open (get_handle ()); mt.drive (driveno ())->open (get_handle ());
/* In append mode, seek to beginning of next filemark */ /* In append mode, seek to beginning of next filemark */
if (flags & O_APPEND) if (flags & O_APPEND)
mt->drive (driveno ())->set_pos (get_handle (), mt.drive (driveno ())->set_pos (get_handle (),
TAPE_SPACE_FILEMARKS, 1, true); TAPE_SPACE_FILEMARKS, 1, true);
if (!(flags & O_DIRECT)) if (!(flags & O_DIRECT))
{ {
devbufsiz = mt->drive (driveno ())->dp ()->MaximumBlockSize; devbufsiz = mt.drive (driveno ())->dp ()->MaximumBlockSize;
devbuf = new char [devbufsiz]; devbuf = new char [devbufsiz];
} }
devbufstart = devbufend = 0; devbufstart = devbufend = 0;
@ -1257,7 +1254,7 @@ fhandler_dev_tape::close ()
if (!hExeced) if (!hExeced)
{ {
lock (-1); lock (-1);
ret = mt->drive (driveno ())->close (get_handle (), is_rewind_device ()); ret = mt.drive (driveno ())->close (get_handle (), is_rewind_device ());
if (ret) if (ret)
__seterrno_from_win_error (ret); __seterrno_from_win_error (ret);
cret = fhandler_dev_raw::close (); cret = fhandler_dev_raw::close ();
@ -1290,7 +1287,7 @@ fhandler_dev_tape::raw_read (void *ptr, size_t &ulen)
ulen = (size_t) -1; ulen = (size_t) -1;
return; return;
} }
block_size = mt->drive (driveno ())->mp ()->BlockSize; block_size = mt.drive (driveno ())->mp ()->BlockSize;
if (devbuf) if (devbuf)
{ {
if (devbufend > devbufstart) if (devbufend > devbufstart)
@ -1320,7 +1317,7 @@ fhandler_dev_tape::raw_read (void *ptr, size_t &ulen)
{ {
debug_printf ("read %d bytes from tape (rest %d)", debug_printf ("read %d bytes from tape (rest %d)",
block_fit, len - block_fit); block_fit, len - block_fit);
ret = mt->drive (driveno ())->read (get_handle (), mt_evt, buf, ret = mt.drive (driveno ())->read (get_handle (), mt_evt, buf,
block_fit); block_fit);
if (ret) if (ret)
__seterrno_from_win_error (ret); __seterrno_from_win_error (ret);
@ -1342,7 +1339,7 @@ fhandler_dev_tape::raw_read (void *ptr, size_t &ulen)
if (!ret && len > 0) if (!ret && len > 0)
{ {
debug_printf ("read %d bytes from tape (one block)", block_size); debug_printf ("read %d bytes from tape (one block)", block_size);
ret = mt->drive (driveno ())->read (get_handle (), mt_evt, devbuf, ret = mt.drive (driveno ())->read (get_handle (), mt_evt, devbuf,
block_size); block_size);
if (ret) if (ret)
__seterrno_from_win_error (ret); __seterrno_from_win_error (ret);
@ -1363,7 +1360,7 @@ fhandler_dev_tape::raw_read (void *ptr, size_t &ulen)
if (!mt_evt && !(mt_evt = CreateEvent (&sec_none, TRUE, FALSE, NULL))) if (!mt_evt && !(mt_evt = CreateEvent (&sec_none, TRUE, FALSE, NULL)))
debug_printf ("Creating event failed, %E"); debug_printf ("Creating event failed, %E");
bytes_read = ulen; bytes_read = ulen;
ret = mt->drive (driveno ())->read (get_handle (), mt_evt, ptr, ret = mt.drive (driveno ())->read (get_handle (), mt_evt, ptr,
bytes_read); bytes_read);
} }
ulen = (ret ? (size_t) -1 : bytes_read); ulen = (ret ? (size_t) -1 : bytes_read);
@ -1376,7 +1373,7 @@ fhandler_dev_tape::raw_write (const void *ptr, size_t len)
lock (-1); lock (-1);
if (!mt_evt && !(mt_evt = CreateEvent (&sec_none, TRUE, FALSE, NULL))) if (!mt_evt && !(mt_evt = CreateEvent (&sec_none, TRUE, FALSE, NULL)))
debug_printf ("Creating event failed, %E"); debug_printf ("Creating event failed, %E");
int ret = mt->drive (driveno ())->write (get_handle (), mt_evt, ptr, len); int ret = mt.drive (driveno ())->write (get_handle (), mt_evt, ptr, len);
if (ret) if (ret)
__seterrno_from_win_error (ret); __seterrno_from_win_error (ret);
return unlock (ret ? -1 : (int) len); return unlock (ret ? -1 : (int) len);
@ -1394,7 +1391,7 @@ fhandler_dev_tape::lseek (_off64_t offset, int whence)
debug_printf ("lseek (%s, %d, %d)", get_name (), offset, whence); debug_printf ("lseek (%s, %d, %d)", get_name (), offset, whence);
block_size = mt->drive (driveno ())->mp ()->BlockSize; block_size = mt.drive (driveno ())->mp ()->BlockSize;
if (block_size == 0) if (block_size == 0)
{ {
set_errno (EIO); set_errno (EIO);
@ -1511,7 +1508,7 @@ fhandler_dev_tape::ioctl (unsigned int cmd, void *buf)
lock (-1); lock (-1);
if (cmd == MTIOCTOP || cmd == MTIOCGET || cmd == MTIOCPOS) if (cmd == MTIOCTOP || cmd == MTIOCGET || cmd == MTIOCPOS)
{ {
ret = mt->drive (driveno ())->ioctl (get_handle (), cmd, buf); ret = mt.drive (driveno ())->ioctl (get_handle (), cmd, buf);
if (ret) if (ret)
__seterrno_from_win_error (ret); __seterrno_from_win_error (ret);
return unlock (ret ? -1 : 0); return unlock (ret ? -1 : 0);

View File

@ -1,6 +1,6 @@
/* mtinfo.h: Defininitions for the Cygwin tape driver class. /* mtinfo.h: Defininitions for the Cygwin tape driver class.
Copyright 2004 Red Hat, Inc. Copyright 2004, 2005, 2006 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -141,7 +141,4 @@ public:
mtinfo_drive *drive (int num) { return &_drive[num]; } mtinfo_drive *drive (int num) { return &_drive[num]; }
}; };
extern HANDLE mt_h;
extern mtinfo *mt;
extern void __stdcall mtinfo_init (); extern void __stdcall mtinfo_init ();

View File

@ -1,7 +1,7 @@
/* shared.cc: shared data area support. /* shared.cc: shared data area support.
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
Red Hat, Inc. 2006 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -29,6 +29,7 @@ details. */
#include "child_info.h" #include "child_info.h"
#include "mtinfo.h" #include "mtinfo.h"
static shared_info cygwin_shared_area __attribute__((section (".cygwin_dll_common"), shared));
shared_info NO_COPY *cygwin_shared; shared_info NO_COPY *cygwin_shared;
user_info NO_COPY *user_shared; user_info NO_COPY *user_shared;
HANDLE NO_COPY cygwin_user_h; HANDLE NO_COPY cygwin_user_h;
@ -50,27 +51,16 @@ shared_name (char *ret_buf, const char *str, int num)
static char *offsets[] = static char *offsets[] =
{ {
(char *) cygwin_shared_address,
(char *) cygwin_shared_address (char *) cygwin_shared_address
+ pround (sizeof (shared_info)), - pround (sizeof (user_info))
- pround (sizeof (console_state))
- pround (sizeof (_pinfo)),
(char *) cygwin_shared_address (char *) cygwin_shared_address
+ pround (sizeof (shared_info)) - pround (sizeof (console_state))
+ pround (sizeof (user_info)), - pround (sizeof (_pinfo)),
(char *) cygwin_shared_address (char *) cygwin_shared_address
+ pround (sizeof (shared_info)) - pround (sizeof (_pinfo)),
+ pround (sizeof (user_info))
+ pround (sizeof (console_state)),
(char *) cygwin_shared_address (char *) cygwin_shared_address
+ pround (sizeof (shared_info))
+ pround (sizeof (user_info))
+ pround (sizeof (console_state))
+ pround (sizeof (_pinfo)),
(char *) cygwin_shared_address
+ pround (sizeof (shared_info))
+ pround (sizeof (user_info))
+ pround (sizeof (console_state))
+ pround (sizeof (_pinfo))
+ pround (sizeof (mtinfo))
}; };
void * __stdcall void * __stdcall
@ -134,11 +124,11 @@ open_shared (const char *name, int n, HANDLE& shared_h, DWORD size,
if (!shared) if (!shared)
api_fatal ("MapViewOfFileEx '%s'(%p), %E. Terminating.", mapname, shared_h); api_fatal ("MapViewOfFileEx '%s'(%p), %E. Terminating.", mapname, shared_h);
if (m == SH_CYGWIN_SHARED && offsets[0] && wincap.needs_memory_protection ()) if (m == SH_USER_SHARED && offsets[0] && wincap.needs_memory_protection ())
{ {
unsigned delta = (char *) shared - offsets[0]; unsigned delta = (char *) shared - offsets[0];
offsets[0] = (char *) shared; offsets[0] = (char *) shared;
for (int i = SH_CYGWIN_SHARED + 1; i < SH_TOTAL_SIZE; i++) for (int i = SH_USER_SHARED + 1; i < SH_TOTAL_SIZE; i++)
{ {
unsigned size = offsets[i + 1] - offsets[i]; unsigned size = offsets[i + 1] - offsets[i];
offsets[i] += delta; offsets[i] += delta;
@ -244,16 +234,8 @@ memory_init ()
cygheap->user.init (); cygheap->user.init ();
} }
/* Initialize general shared memory */ cygwin_shared = &cygwin_shared_area;
shared_locations sh_cygwin_shared = SH_CYGWIN_SHARED;
cygwin_shared = (shared_info *) open_shared ("shared",
CYGWIN_VERSION_SHARED_DATA,
cygheap->shared_h,
sizeof (*cygwin_shared),
sh_cygwin_shared);
cygwin_shared->initialize (); cygwin_shared->initialize ();
ProtectHandleINH (cygheap->shared_h);
user_shared_initialize (false); user_shared_initialize (false);
mtinfo_init (); mtinfo_init ();

View File

@ -1,6 +1,6 @@
/* shared_info.h: shared info for cygwin /* shared_info.h: shared info for cygwin
Copyright 2000, 2001, 2002, 2003, 2004, 2005 Red Hat, Inc. Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -169,11 +169,9 @@ extern HANDLE cygwin_user_h;
enum shared_locations enum shared_locations
{ {
SH_CYGWIN_SHARED,
SH_USER_SHARED, SH_USER_SHARED,
SH_SHARED_CONSOLE, SH_SHARED_CONSOLE,
SH_MYSELF, SH_MYSELF,
SH_MTINFO,
SH_TOTAL_SIZE, SH_TOTAL_SIZE,
SH_JUSTCREATE, SH_JUSTCREATE,
SH_JUSTOPEN SH_JUSTOPEN
@ -186,7 +184,7 @@ void __stdcall memory_init ();
(((DWORD) ((p) + 1) + system_info.dwAllocationGranularity - 1) / \ (((DWORD) ((p) + 1) + system_info.dwAllocationGranularity - 1) / \
system_info.dwAllocationGranularity))) system_info.dwAllocationGranularity)))
#define cygwin_shared_address ((void *) 0x60000000) #define cygwin_shared_address ((void *) 0x61000000)
#ifdef _FHANDLER_H_ #ifdef _FHANDLER_H_
struct console_state struct console_state

View File

@ -1,6 +1,6 @@
/* tty.h: shared tty info for cygwin /* tty.h: shared tty info for cygwin
Copyright 2000, 2001, 2002, 2003, 2004 Red Hat, Inc. Copyright 2000, 2001, 2002, 2003, 2004, 2006 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -70,7 +70,6 @@ public:
int ioctl_retval; int ioctl_retval;
int write_error; int write_error;
tty_min (int t = -1, pid_t s = -1) : sid (s), ntty (t) {}
void setntty (int n) {ntty = n;} void setntty (int n) {ntty = n;}
pid_t getpgid () {return pgid;} pid_t getpgid () {return pgid;}
void setpgid (int pid) {pgid = pid;} void setpgid (int pid) {pgid = pid;}