diff options
author | Jari Vetoniemi <mailroxas@gmail.com> | 2018-04-18 16:06:36 +0300 |
---|---|---|
committer | Jari Vetoniemi <mailroxas@gmail.com> | 2018-04-18 16:06:36 +0300 |
commit | 729566b9db41a4425c26ee7fad8c5d1f48355f4c (patch) | |
tree | 8ce0fcaeb1ce51e884f3f88166c8e079e6b7ff3d /src/libc.c | |
parent | 793d5888769a7351fc699a31f6caa73bcbcbe338 (diff) |
libc: stdio must be wrapped
Bionic libc does stupid stuff and defines standard streams as macros to
reference of an array element. Thus we can't just point standard streams
to their respective correct addresses. (Why does both glibc and bionic
even expose the internal FILE structs??)
So we have to wrap every function that takes FILE* as argument and
mangle it with bionic_file_to_glibc_file. We can't just check addresses
because gnu's libstdc++ copies the FILE*.
I assume same thing happens with the c++ locale support, and we need to
do more complex ctype wrapping.
Diffstat (limited to 'src/libc.c')
-rw-r--r-- | src/libc.c | 13 |
1 files changed, 7 insertions, 6 deletions
@@ -14,10 +14,6 @@ #include <netdb.h> // h_errno #include "wrapper/verbose.h" -#ifdef VERBOSE_FUNCTIONS -# include "libc-verbose.h" -#endif - struct bionic_dirent { uint64_t d_ino; int64_t d_off; @@ -74,9 +70,10 @@ tkill(int tid, int sig) // Stuff needed for runtime compatibility, but not neccessary for linking // Also stuff that exists in glibc, but needs to be wrapped for runtime compatibility +#include "libc-stdio.h" + const char *bionic__ctype_, *bionic__tolower_tab_, *bionic__toupper_tab_; -char bionic___sF[0x54] = {0}; -unsigned int bionic___page_size = PAGE_SIZE; +const unsigned int bionic___page_size = PAGE_SIZE; __attribute_const__ int* @@ -378,3 +375,7 @@ bionic___futex_wake(volatile void* ftx, int count) return syscall(SYS_futex, ftx, FUTEX_WAKE, count, NULL, 0); } #endif + +#ifdef VERBOSE_FUNCTIONS +# include "libc-verbose.h" +#endif |