diff options
author | David 'Digit' Turner <digit@google.com> | 2009-06-03 19:32:37 +0200 |
---|---|---|
committer | David 'Digit' Turner <digit@google.com> | 2009-06-03 19:32:37 +0200 |
commit | 3a654b1e04d4275ae315cfe1b196998acf10052c (patch) | |
tree | 79ce08ac573c6c5bd7d7a65f7fdc24237c00452a /linker/README.TXT | |
parent | 03eabfe65e1e2c36f4d26c78a730fa19a3bdada3 (diff) | |
download | bionic-3a654b1e04d4275ae315cfe1b196998acf10052c.zip bionic-3a654b1e04d4275ae315cfe1b196998acf10052c.tar.gz bionic-3a654b1e04d4275ae315cfe1b196998acf10052c.tar.bz2 |
Revert "Fix the C library initialization to avoid calling static C++ constructors twice."
This reverts commit 03eabfe65e1e2c36f4d26c78a730fa19a3bdada3.
Diffstat (limited to 'linker/README.TXT')
-rw-r--r-- | linker/README.TXT | 43 |
1 files changed, 0 insertions, 43 deletions
diff --git a/linker/README.TXT b/linker/README.TXT index 0be9be4..4fff14e 100644 --- a/linker/README.TXT +++ b/linker/README.TXT @@ -112,46 +112,3 @@ On x86, the lists of constructors and destructors are placed in special sections named ".ctors" and ".dtors", and the DT_INIT / DT_FINI functions are in charge of calling them explicitely. - -C Library Usage Restrictions: ------------------------------ - -The dynamic linker executable (/system/bin/linker) is built using the -static version of the C library (libc.a), in order to use various functions -and system calls provided by it. - -However, it will normally, at runtime, map the shared library version -of the C library (/system/lib/libc.so) as well in the process' address -space. This means that: - -- any global variable defined by the C library will appear twice in - the process address space, at different addresses. - -- some functions will be duplicated too, though those that refer to - global variables will refer to distinct addresses. - -This can lead to subtle conflicts, typically for process-specific data that -is managed through the kernel. A good example is the handling of the -end of the data segment, which is normally done through the 'sbrk' or -'brk' system call by the malloc implementation. - -If two similar, but distinct, malloc implementations run at the same time, -and if each one thinks it exclusively manages some process settings, hideous -corruption or crashes may occur. - -For this very reason, THE DYNAMIC LINKER CANNOT USE malloc()/free() ! -That's why it is linked to a special version of the C library that will -abort when any of these functions (or calloc()/realloc()) is called. - -Moreover, it cannot use any C library feature that could use these -indirectly. Experience as shown that this meant: - -- avoiding any FILE* - related stdio function (fopen, fread, fprintf, etc...) -- avoiding snprintf() with any floating-point formatter ("%f", "%g") - -There are probably other cases that haven't been discovered yet, so the -code needs to be very frugal in its use of the C library. - -This also explains why the linker's tracing macros are all disabled by -default. Enabling them sometimes creates problems, depending on the process -being loaded, so they should be considered an experimental feature for now. |