So I'm looking through the source of gcc compiler and I've come along this in fork.c:
int
__fork ()
{
__set_errno (ENOSYS);
return -1;
}
libc_hidden_def (__fork)
stub_warning (fork)
weak_alias (__fork, fork)
#include <stub-tag.h>
I'm trying to figure out what weak_alias does. I've used the grep command inside the glibc source files to find all occurrences of #define weak_alias:
grep -r "#define weak_alias"
I've found many occurrences of the macro:
#define weak_alias(n, a)
but the macros don't actually explain anything. They just define that statement they don't show how its being replaced. For example one occurrence is in profil.c:
/* Turn off the attempt to generate ld aliasing records. */
#undef weak_alias
#define weak_alias(a,b)
So any ideas what weak_alias does and where it is being defined?
Thanks in advance
It is a macro that does the following:
It declares a weak function, if you didnt provide a strong symbol name for that function it will call the function you have laised it to. for example
So if you haven't provided actual implementation for foo it will basically use _foo and return 1.
from https://github.com/lattera/glibc/blob/master/include/libc-symbols.h
About weak symbol:
https://en.wikipedia.org/wiki/Weak_symbol