Hi, While working on FDPIC support for ARM in uclibc-ng, I've noticed that the write() function if defined as a strong global symbol, while the __GI_write alias is weak.
00000034 w F .text 0000005c .hidden __GI_write 00000034 g F .text 0000005c write my pre-processed write.i contains: ssize_t __attribute__ ((weak)) write (int fd, const void *buf, size_t count) { int oldtype; ssize_t result; if (__builtin_expect (__libc_multiple_threads == 0, 1)) return __write_nocancel (fd, buf, count); oldtype = __libc_enable_asynccancel (); result = __write_nocancel (fd, buf, count); __libc_disable_asynccancel (oldtype); return result; } extern __typeof (write) __EI_write __asm__("" "write"); extern __typeof (write) __EI_write __attribute__((alias ("" "__GI_write"))); and write.s has: .weak __GI_write .hidden __GI_write .type __GI_write, %function __GI_write: .fnstart [...] .size __GI_write, .-__GI_write .global write .set write,__GI_write From the .i file, I'd expect the weak attribute to be set on write. FWIW, I'd like write to be weak, because currently it prevents re-defining it user code and linking statically with libc.a I've checked that glibc and newlib have weak write. Since this seems to depend on the threads model, my .config has: # HAS_NO_THREADS is not set UCLIBC_HAS_LINUXTHREADS=y UCLIBC_HAS_THREADS_NATIVE=y UCLIBC_HAS_THREADS=y PTHREADS_DEBUG_SUPPORT=y and having # UCLIBC_HAS_LINUXTHREADS is not set has no effect on write's weakness. What am I missing? Thanks, Christophe _______________________________________________ devel mailing list devel@uclibc-ng.org https://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel