[uclibc-ng-devel] write is not weak?

Christophe Lyon christophe.lyon at linaro.org
Fri Jun 22 11:07:14 CEST 2018


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


More information about the devel mailing list