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:
Diffstat (limited to 'winsup/cygwin/DevDocs/ROADMAP.OLD')
-rw-r--r--winsup/cygwin/DevDocs/ROADMAP.OLD129
1 files changed, 129 insertions, 0 deletions
diff --git a/winsup/cygwin/DevDocs/ROADMAP.OLD b/winsup/cygwin/DevDocs/ROADMAP.OLD
new file mode 100644
index 000000000..fd0387d59
--- /dev/null
+++ b/winsup/cygwin/DevDocs/ROADMAP.OLD
@@ -0,0 +1,129 @@
+
+ WINSUP ROADMAP
+
+The purpose of this document is to give the briefest overview of how
+the various parts of cygwin work together and where everything can be
+found. The intended audience is people developing the cygwin dll
+itself. Comments to dj@cygnus.com.
+
+=== cygwin1.dll source files
+
+- overhead
+.h winsup autoload debug external shared sync
+.cc assert dcrt0 debug external init ntea registry security
+ shared smallprint strace sync
+.din cygwin
+.rc winver
+.sgml external shared
+
+- processes
+.h sigproc
+.cc exec fork pinfo resource signal sigproc spawn wait
+
+- signals
+.cc exceptions window
+
+- files and I/O
+.h delqueue fhandler path select
+.cc delqueue dir fhandler* dtable path pipe select tty
+.sgml dtable path
+
+- common unix functions
+.h dll_init tz_posixrules
+.cc dlfcn dll_init environ errno fcntl flog grp ioctl localtime
+ malloc passwd scandir strsep syscalls sysconf syslog termios
+.c longjmp setjmp
+.sgml dll_init
+
+- unix emulation
+.cc heap mmap net times unifo uname
+
+
+--- if MT_SAFE
+.h thread
+.cc pthread thread
+
+--- from other places
+regex/*
+../libiberty/{random,strsignal}
+../newlib/* (libc)
+
+=== libcygwin.a source files
+
+libccrt0.cc
+libcmain.cc
+dll_entry.cc
+dll_main.cc
+getopt.c
+
+=== gmon (profiling, -pg)
+
+gcrt0.c
+gmon.c gmon.h
+mcount.c
+profil.c profil.h
+
+=== entry points
+
+- normal cygwin program
+
+newlib/libc/sys/cygwin/crt0.c has mainCRTStartup() and calls cygwin_crt0()
+
+libccrt0.cc has cygwin_crt0() and calls dll_crt0()
+
+dcrt0.cc - has dll_crt0()
+
+Note: dll_init.cc has nothing to do with initializing the cygwin dll.
+It initializes the dlls you have dl_open'd.
+
+- cygwin-built dll
+
+dll_entry.cc - has a macro for wrapping your dll startup function
+ (equivalent of DllMain()) in such a way that you get your
+ cygwin environment set up automatically when your dll is
+ loaded.
+
+dll_main.cc - has empty DllMain() in case you don't have your own
+
+- manually loading cygwin1.dll
+
+init.cc - has dll_entry() which is called by the OS when the dll is
+ loaded. It doesn't do much except note if you linked
+ cygwin1.dll or are manually loading it.
+
+=== About "fhandlers"
+
+An fhandler is a file type handler. This is where the unix device
+emulation happens.
+
+dtable.cc maps posix file descriptors to a table of file handlers (type
+fhandler) in the dll. It's mostly concerned with managing the table
+of descriptors (open, dup, fork, select). Most of the posix I/O
+system calls (syscalls.cc) use the fdtab table to call the right
+fhandler directly.
+
+fhandler.cc is the base class; specific types are derived as
+appropriate (see fhandler.h). dtable.cc is in charge of selecting and
+creating a suitable fhandler when you open a file. path.cc handles
+emulated files in /dev (like /dev/null) by returning an FH_* value
+from get_device_number (which dtable.cc calls in dtable::build_fhandler).
+
+Note: if you're looking for read() and write(), they call _read() and
+_write() in syscalls.cc. The non-underscored ones are in
+newlib/libc/syscalls and just call the underscored ones.
+
+=== How "fork" works
+
+It all starts in fork() in fork.cc.
+
+Set up a pid in the shared memory area for the new child. Use
+setjmp() to capture state. First time (parent), set up some stuff and
+use CreateProcess to run a second copy of the same executable. The
+second copy will note in the shared memory area that it's a fork, and
+do the longjmp. They sync up and the parent copies all it's program
+memory to the child's address space. There's also code to reload
+dlls, map shared memory and mmap'd files, etc.
+
+Handling the special startup for the child is done in dcrt0.cc in many
+places. This case is triggered by a special StartupInfo structure
+that's passed from the parent to the child in CreateProcessA.