diff options
Diffstat (limited to 'sysdeps/ia64/dl-fptr.c')
-rw-r--r-- | sysdeps/ia64/dl-fptr.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/sysdeps/ia64/dl-fptr.c b/sysdeps/ia64/dl-fptr.c index 0fb9654ab8..85fefa3ea8 100644 --- a/sysdeps/ia64/dl-fptr.c +++ b/sysdeps/ia64/dl-fptr.c @@ -184,3 +184,29 @@ _dl_unmap (struct link_map *map) __ia64_fptr_lock = 0; #endif } + +Elf64_Addr +_dl_lookup_address (const void *address) +{ + Elf64_Addr addr = (Elf64_Addr) address; + struct ia64_fptr *f; + +#ifdef _LIBC_REENTRANT + /* Make sure we are alone. */ + while (testandset (&__ia64_fptr_lock)); +#endif + + for (f = __fptr_root; f != NULL; f = f->next) + if (f == address) + { + addr = f->func; + break; + } + +#ifdef _LIBC_REENTRANT + /* Release the lock. */ + __ia64_fptr_lock = 0; +#endif + + return addr; +} |