mirror of https://git.musl-libc.org/git/musl
Browse Source
prior to this change, a large portion of libc was unusable prior to relocation by the dynamic linker, due to dependence on the global data in the __libc structure and the need to obtain its address through the GOT. with this patch, the accessor function __libc_loc is now able to obtain the address of __libc via PC-relative addressing without using the GOT. this means the majority of libc functionality is now accessible right away. naturally, the above statements all depend on having an architecture where PC-relative addressing and jumps/calls are feasible, and a compiler that generates the appropriate code.rs-1.0
2 changed files with 19 additions and 4 deletions
@ -1,3 +1,11 @@ |
|||||
#include "libc.h" |
#include "libc.h" |
||||
|
|
||||
struct libc libc; |
#ifdef __PIC__ |
||||
|
struct __libc *__libc_loc() |
||||
|
{ |
||||
|
static struct __libc __libc; |
||||
|
return &__libc; |
||||
|
} |
||||
|
#else |
||||
|
struct __libc __libc; |
||||
|
#endif |
||||
|
|||||
Loading…
Reference in new issue