summaryrefslogtreecommitdiff
path: root/glibc/startup.mdwn
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2018-03-17 01:35:16 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2018-03-17 01:35:16 +0100
commit8026152efb84ec1ef45f0023ebff69654b92dadd (patch)
tree58029d274cf7221409d3b76d81bc5fc058fa8030 /glibc/startup.mdwn
parent9fb5b9c57cbc8420a1207574c4d969d90794fb7b (diff)
Note where the signals thread is created
Diffstat (limited to 'glibc/startup.mdwn')
-rw-r--r--glibc/startup.mdwn10
1 files changed, 5 insertions, 5 deletions
diff --git a/glibc/startup.mdwn b/glibc/startup.mdwn
index 0fe15b3..67d66c1 100644
--- a/glibc/startup.mdwn
+++ b/glibc/startup.mdwn
@@ -32,8 +32,8 @@ is quite hairy on GNU Hurd systems.
* `_hurd_startup` (hurd/hurdstartup.c) gets hurdish information from servers and calls its `main` parameter.
* the `main` parameter was actually `doinit`, which mangles the stack and calls `doinit1` which calls `init`.
* `init` sets threadvars, tries to initialize threads (and perhaps switches to the new stack) and gets to call `init1`.
- * `init1` checks the new stack, calls `_hurd_init` (hurd/hurdinit.c)
- * `_hurd_init` initializes initial ports, runs the `_hurd_subinit` hooks (`init_dtable` hurd/dtable.c notably initializes the FD table and the `_hurd_fd_subinit` hooks, which notably checks `std*`).
+ * `init1` gets the Hurd block, calls `_hurd_init` (hurd/hurdinit.c) on it
+ * `_hurd_init` initializes initial ports, starts the signal thread, runs the `_hurd_subinit` hooks (`init_dtable` hurd/dtable.c notably initializes the FD table and the `_hurd_fd_subinit` hooks, which notably checks `std*`).
* We are back to `_start`, which jumps to `_start1` which is the normal libc startup which calls `__libc_start_main`
* `__libc_start_main` (actually called `LIBC_START_MAIN` in csu/libc-start.c) initializes libc, tls, libpthread, atexit
* `__libc_start_main` calls initialization function given as parameter `__libc_csu_init`,
@@ -56,10 +56,10 @@ is quite hairy on GNU Hurd systems.
* we are back to `go`, which branches to `_dl_start_user`.
* `_dl_start_user` (./sysdeps/i386/dl-machine.h) runs `RTLD_START_SPECIAL_INIT` (sysdeps/mach/hurd/i386/dl-machine.h) which calls `_dl_init_first`.
* `_dl_init_first` calls `first_init` which calls `__mach_init` to initialize enough to run RPCs, then runs the `_hurd_preinit_hook` hooks, which initialize global variables of libc.
- * `_dl_init_first` calls `init`.
+ * `_dl_init_first` (sysdeps/mach/hurd/i386/init-first.c) calls `init`.
* `init` sets threadvars, tries to initialize threads (and perhaps switches to the new stack) and gets to call `init1`.
- * `init1` checks the new stack, calls `_hurd_init` (hurd/hurdinit.c)
- * `_hurd_init` initializes initial ports, runs the `_hurd_subinit` hooks (`init_dtable` hurd/dtable.c notably initializes the FD table and the `_hurd_fd_subinit` hooks, which notably checks `std*`).
+ * `init1` gets the Hurd block, calls `_hurd_init` (hurd/hurdinit.c) on it
+ * `_hurd_init` initializes initial ports, starts the signal thread, runs the `_hurd_subinit` hooks (`init_dtable` hurd/dtable.c notably initializes the FD table and the `_hurd_fd_subinit` hooks, which notably checks `std*`).
* we are back to `_dl_start_user`, which calls `_dl_init` (elf/dl-init.c) which calls application initializers.
* `_dl_start_user` jumps to the application's entry point, `_start`
* `_start` (sysdeps/i386/start.S) calls `__libc_start_main`