Hello,

This is my first post to the uClibc mailing-list.
I have a question related to weak API symbols of the uClibc.

I have noticed that, when linking a static binary against the uClibc, that certain symbols,
such as 'abort', are not defined as weak symbol.
The end result is that this kind of trivial program my_abort.c :

void abort()
{
    while(1);
}
int main()
{
    abort();
    return 0;
}

can not be compiled with :
gcc -static my_abort -L<uclibc/path> -lc

it fails with :
<uclibc/path>/usr/i386-linux-uclibc/usr/lib/libc.a(abort.os): In function `__GI_abort': <uclibc/sources>/uClibc-0.9.33.2/libc/stdlib/abort.c:61: multiple definition of `abort'
my_abort.o:my_abort.c:12: first defined here
collect2: error: ld returned 1 exit status

When I try this using newlib or glibc, it works, because the 'abort' symbol is defined as weak.

One workaround/solution would be to modify libc/stdlib/abort.c :
-libc_hidden_def(abort)
+libc_hidden_weak(abort)

What is the rationale behind defining (or not) such symbols as weak, to let the user override implementation (as string alias), while still getting the weak symbols as default implementation ?

Thanks by advance,
NS.

_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to