| |
| /*--------------------------------------------------------------------*/ |
| /*--- Give dummy bindings for everything the real libpthread.so ---*/ |
| /*--- binds. vg_libpthread_unimp.c ---*/ |
| /*--------------------------------------------------------------------*/ |
| |
| /* |
| This file is part of Valgrind, an extensible x86 protected-mode |
| emulator for monitoring program execution on x86-Unixes. |
| |
| Copyright (C) 2000-2002 Julian Seward |
| jseward@acm.org |
| |
| This program is free software; you can redistribute it and/or |
| modify it under the terms of the GNU General Public License as |
| published by the Free Software Foundation; either version 2 of the |
| License, or (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program; if not, write to the Free Software |
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
| 02111-1307, USA. |
| |
| The GNU General Public License is contained in the file COPYING. |
| */ |
| |
| /* --------------------------------------------------------------------- |
| ALL THIS CODE RUNS ON THE SIMULATED CPU. |
| Give a binding for everything the real libpthread.so binds. |
| ------------------------------------------------------------------ */ |
| |
| #include "vg_include.h" /* For GLIBC_2_3, or not, as the case may be */ |
| |
| extern void vgPlain_unimp ( char* ); |
| #define unimp(str) vgPlain_unimp(str) |
| |
| //void _IO_flockfile ( void ) { unimp("_IO_flockfile"); } |
| void _IO_ftrylockfile ( void ) { unimp("_IO_ftrylockfile"); } |
| //void _IO_funlockfile ( void ) { unimp("_IO_funlockfile"); } |
| //void __close ( void ) { unimp("__close"); } |
| //void __connect ( void ) { unimp("__connect"); } |
| //void __errno_location ( void ) { unimp("__errno_location"); } |
| //void __fcntl ( void ) { unimp("__fcntl"); } |
| //void __fork ( void ) { unimp("__fork"); } |
| //void __h_errno_location ( void ) { unimp("__h_errno_location"); } |
| void __libc_allocate_rtsig ( void ) { unimp("__libc_allocate_rtsig"); } |
| void __libc_current_sigrtmax ( void ) { unimp("__libc_current_sigrtmax"); } |
| void __libc_current_sigrtmin ( void ) { unimp("__libc_current_sigrtmin"); } |
| //void __lseek ( void ) { unimp("__lseek"); } |
| //void __open ( void ) { unimp("__open"); } |
| //void __open64 ( void ) { unimp("__open64"); } |
| //void __pread64 ( void ) { unimp("__pread64"); } |
| //void __pthread_atfork ( void ) { unimp("__pthread_atfork"); } |
| //void __pthread_getspecific ( void ) { unimp("__pthread_getspecific"); } |
| //void __pthread_key_create ( void ) { unimp("__pthread_key_create"); } |
| //void __pthread_kill_other_threads_np ( void ) { unimp("__pthread_kill_other_threads_np"); } |
| //void __pthread_mutex_destroy ( void ) { unimp("__pthread_mutex_destroy"); } |
| //void __pthread_mutex_init ( void ) { unimp("__pthread_mutex_init"); } |
| //void __pthread_mutex_lock ( void ) { unimp("__pthread_mutex_lock"); } |
| //void __pthread_mutex_trylock ( void ) { unimp("__pthread_mutex_trylock"); } |
| //void __pthread_mutex_unlock ( void ) { unimp("__pthread_mutex_unlock"); } |
| //void __pthread_mutexattr_destroy ( void ) { unimp("__pthread_mutexattr_destroy"); } |
| //void __pthread_mutexattr_init ( void ) { unimp("__pthread_mutexattr_init"); } |
| //void __pthread_mutexattr_settype ( void ) { unimp("__pthread_mutexattr_settype"); } |
| //void __pthread_once ( void ) { unimp("__pthread_once"); } |
| //void __pthread_setspecific ( void ) { unimp("__pthread_setspecific"); } |
| //void __pwrite64 ( void ) { unimp("__pwrite64"); } |
| //void __read ( void ) { unimp("__read"); } |
| //void __res_state ( void ) { unimp("__res_state"); } |
| //void __send ( void ) { unimp("__send"); } |
| //void __sigaction ( void ) { unimp("__sigaction"); } |
| //--//void __vfork ( void ) { unimp("__vfork"); } |
| //void __wait ( void ) { unimp("__wait"); } |
| //void __write ( void ) { unimp("__write"); } |
| //void _pthread_cleanup_pop ( void ) { unimp("_pthread_cleanup_pop"); } |
| //void _pthread_cleanup_pop_restore ( void ) { unimp("_pthread_cleanup_pop_restore"); } |
| //void _pthread_cleanup_push ( void ) { unimp("_pthread_cleanup_push"); } |
| //void _pthread_cleanup_push_defer ( void ) { unimp("_pthread_cleanup_push_defer"); } |
| //void longjmp ( void ) { unimp("longjmp"); } |
| //void pthread_atfork ( void ) { unimp("pthread_atfork"); } |
| //void pthread_attr_destroy ( void ) { unimp("pthread_attr_destroy"); } |
| //void pthread_attr_getdetachstate ( void ) { unimp("pthread_attr_getdetachstate"); } |
| void pthread_attr_getinheritsched ( void ) { unimp("pthread_attr_getinheritsched"); } |
| //void pthread_attr_getschedparam ( void ) { unimp("pthread_attr_getschedparam"); } |
| //void pthread_attr_getschedpolicy ( void ) { unimp("pthread_attr_getschedpolicy"); } |
| //void pthread_attr_getscope ( void ) { unimp("pthread_attr_getscope"); } |
| |
| //void pthread_attr_setdetachstate ( void ) { unimp("pthread_attr_setdetachstate"); } |
| //void pthread_attr_setinheritsched ( void ) { unimp("pthread_attr_setinheritsched"); } |
| //void pthread_attr_setschedparam ( void ) { unimp("pthread_attr_setschedparam"); } |
| //void pthread_attr_setschedpolicy ( void ) { unimp("pthread_attr_setschedpolicy"); } |
| //void pthread_attr_setscope ( void ) { unimp("pthread_attr_setscope"); } |
| void pthread_barrier_destroy ( void ) { unimp("pthread_barrier_destroy"); } |
| void pthread_barrier_init ( void ) { unimp("pthread_barrier_init"); } |
| void pthread_barrier_wait ( void ) { unimp("pthread_barrier_wait"); } |
| void pthread_barrierattr_destroy ( void ) { unimp("pthread_barrierattr_destroy"); } |
| void pthread_barrierattr_init ( void ) { unimp("pthread_barrierattr_init"); } |
| void pthread_barrierattr_setpshared ( void ) { unimp("pthread_barrierattr_setpshared"); } |
| //void pthread_cancel ( void ) { unimp("pthread_cancel"); } |
| //void pthread_cond_broadcast ( void ) { unimp("pthread_cond_broadcast"); } |
| //void pthread_cond_destroy ( void ) { unimp("pthread_cond_destroy"); } |
| //void pthread_cond_init ( void ) { unimp("pthread_cond_init"); } |
| //void pthread_cond_signal ( void ) { unimp("pthread_cond_signal"); } |
| //void pthread_cond_timedwait ( void ) { unimp("pthread_cond_timedwait"); } |
| //void pthread_cond_wait ( void ) { unimp("pthread_cond_wait"); } |
| //void pthread_condattr_destroy ( void ) { unimp("pthread_condattr_destroy"); } |
| void pthread_condattr_getpshared ( void ) { unimp("pthread_condattr_getpshared"); } |
| //void pthread_condattr_init ( void ) { unimp("pthread_condattr_init"); } |
| void pthread_condattr_setpshared ( void ) { unimp("pthread_condattr_setpshared"); } |
| //void pthread_detach ( void ) { unimp("pthread_detach"); } |
| //void pthread_equal ( void ) { unimp("pthread_equal"); } |
| //void pthread_exit ( void ) { unimp("pthread_exit"); } |
| //void pthread_getattr_np ( void ) { unimp("pthread_getattr_np"); } |
| void pthread_getcpuclockid ( void ) { unimp("pthread_getcpuclockid"); } |
| //void pthread_getschedparam ( void ) { unimp("pthread_getschedparam"); } |
| //void pthread_getspecific ( void ) { unimp("pthread_getspecific"); } |
| //void pthread_join ( void ) { unimp("pthread_join"); } |
| //void pthread_key_create ( void ) { unimp("pthread_key_create"); } |
| //void pthread_key_delete ( void ) { unimp("pthread_key_delete"); } |
| //void pthread_kill ( void ) { unimp("pthread_kill"); } |
| //void pthread_mutex_destroy ( void ) { unimp("pthread_mutex_destroy"); } |
| //void pthread_mutex_init ( void ) { unimp("pthread_mutex_init"); } |
| //void pthread_mutex_lock ( void ) { unimp("pthread_mutex_lock"); } |
| void pthread_mutex_timedlock ( void ) { unimp("pthread_mutex_timedlock"); } |
| //void pthread_mutex_trylock ( void ) { unimp("pthread_mutex_trylock"); } |
| //void pthread_mutex_unlock ( void ) { unimp("pthread_mutex_unlock"); } |
| //void pthread_mutexattr_destroy ( void ) { unimp("pthread_mutexattr_destroy"); } |
| //void pthread_mutexattr_init ( void ) { unimp("pthread_mutexattr_init"); } |
| //void pthread_once ( void ) { unimp("pthread_once"); } |
| //void pthread_rwlock_destroy ( void ) { unimp("pthread_rwlock_destroy"); } |
| //void pthread_rwlock_init ( void ) { unimp("pthread_rwlock_init"); } |
| //void pthread_rwlock_rdlock ( void ) { unimp("pthread_rwlock_rdlock"); } |
| void pthread_rwlock_timedrdlock ( void ) { unimp("pthread_rwlock_timedrdlock"); } |
| void pthread_rwlock_timedwrlock ( void ) { unimp("pthread_rwlock_timedwrlock"); } |
| //void pthread_rwlock_tryrdlock ( void ) { unimp("pthread_rwlock_tryrdlock"); } |
| //void pthread_rwlock_trywrlock ( void ) { unimp("pthread_rwlock_trywrlock"); } |
| //void pthread_rwlock_unlock ( void ) { unimp("pthread_rwlock_unlock"); } |
| //void pthread_rwlock_wrlock ( void ) { unimp("pthread_rwlock_wrlock"); } |
| //void pthread_rwlockattr_destroy ( void ) { unimp("pthread_rwlockattr_destroy"); } |
| void pthread_rwlockattr_getkind_np ( void ) { unimp("pthread_rwlockattr_getkind_np"); } |
| void pthread_rwlockattr_getpshared ( void ) { unimp("pthread_rwlockattr_getpshared"); } |
| //void pthread_rwlockattr_init ( void ) { unimp("pthread_rwlockattr_init"); } |
| void pthread_rwlockattr_setkind_np ( void ) { unimp("pthread_rwlockattr_setkind_np"); } |
| //void pthread_rwlockattr_setpshared ( void ) { unimp("pthread_rwlockattr_setpshared"); } |
| //void pthread_self ( void ) { unimp("pthread_self"); } |
| //void pthread_setcancelstate ( void ) { unimp("pthread_setcancelstate"); } |
| //void pthread_setcanceltype ( void ) { unimp("pthread_setcanceltype"); } |
| //void pthread_setschedparam ( void ) { unimp("pthread_setschedparam"); } |
| //void pthread_setspecific ( void ) { unimp("pthread_setspecific"); } |
| //void pthread_sigmask ( void ) { unimp("pthread_sigmask"); } |
| //void pthread_testcancel ( void ) { unimp("pthread_testcancel"); } |
| //void raise ( void ) { unimp("raise"); } |
| void sem_close ( void ) { unimp("sem_close"); } |
| void sem_open ( void ) { unimp("sem_open"); } |
| //void sem_timedwait ( void ) { unimp("sem_timedwait"); } |
| void sem_unlink ( void ) { unimp("sem_unlink"); } |
| //void sigaction ( void ) { unimp("sigaction"); } |
| //void siglongjmp ( void ) { unimp("siglongjmp"); } |
| //void sigwait ( void ) { unimp("sigwait"); } |
| |
| void __pthread_clock_gettime ( void ) { unimp("__pthread_clock_gettime"); } |
| void __pthread_clock_settime ( void ) { unimp("__pthread_clock_settime"); } |
| #ifdef GLIBC_2_3 |
| /* Needed for Red Hat 8.0 */ |
| __asm__(".symver __pthread_clock_gettime," |
| "__pthread_clock_gettime@GLIBC_PRIVATE"); |
| __asm__(".symver __pthread_clock_settime," |
| "__pthread_clock_settime@GLIBC_PRIVATE"); |
| #endif |
| |
| |
| #if 0 |
| void pthread_create@@GLIBC_2.1 ( void ) { unimp("pthread_create@@GLIBC_2.1"); } |
| void pthread_create@GLIBC_2.0 ( void ) { unimp("pthread_create@GLIBC_2.0"); } |
| |
| void sem_wait@@GLIBC_2.1 ( void ) { unimp("sem_wait@@GLIBC_2.1"); } |
| void sem_wait@GLIBC_2.0 ( void ) { unimp("sem_wait@GLIBC_2.0"); } |
| |
| void sem_trywait@@GLIBC_2.1 ( void ) { unimp("sem_trywait@@GLIBC_2.1"); } |
| void sem_trywait@GLIBC_2.0 ( void ) { unimp("sem_trywait@GLIBC_2.0"); } |
| |
| void sem_post@@GLIBC_2.1 ( void ) { unimp("sem_post@@GLIBC_2.1"); } |
| void sem_post@GLIBC_2.0 ( void ) { unimp("sem_post@GLIBC_2.0"); } |
| |
| void sem_destroy@@GLIBC_2.1 ( void ) { unimp("sem_destroy@@GLIBC_2.1"); } |
| void sem_destroy@GLIBC_2.0 ( void ) { unimp("sem_destroy@GLIBC_2.0"); } |
| void sem_getvalue@@GLIBC_2.1 ( void ) { unimp("sem_getvalue@@GLIBC_2.1"); } |
| void sem_getvalue@GLIBC_2.0 ( void ) { unimp("sem_getvalue@GLIBC_2.0"); } |
| void sem_init@@GLIBC_2.1 ( void ) { unimp("sem_init@@GLIBC_2.1"); } |
| void sem_init@GLIBC_2.0 ( void ) { unimp("sem_init@GLIBC_2.0"); } |
| |
| void pthread_attr_init@@GLIBC_2.1 ( void ) { unimp("pthread_attr_init@@GLIBC_2.1"); } |
| void pthread_attr_init@GLIBC_2.0 ( void ) { unimp("pthread_attr_init@GLIBC_2.0"); } |
| #endif |
| |
| |
| |
| # define strong_alias(name, aliasname) \ |
| extern __typeof (name) aliasname __attribute__ ((alias (#name))); |
| |
| # define weak_alias(name, aliasname) \ |
| extern __typeof (name) aliasname __attribute__ ((weak, alias (#name))); |
| |
| //weak_alias(pthread_rwlock_destroy, __pthread_rwlock_destroy) |
| //weak_alias(pthread_rwlock_init, __pthread_rwlock_init) |
| //weak_alias(pthread_rwlock_tryrdlock, __pthread_rwlock_tryrdlock) |
| //weak_alias(pthread_rwlock_trywrlock, __pthread_rwlock_trywrlock) |
| //weak_alias(pthread_rwlock_wrlock, __pthread_rwlock_wrlock) |
| weak_alias(_IO_ftrylockfile, ftrylockfile) |
| |
| //__attribute__((weak)) void pread ( void ) { vgPlain_unimp("pread"); } |
| //__attribute__((weak)) void pwrite ( void ) { vgPlain_unimp("pwrite"); } |
| //__attribute__((weak)) void msync ( void ) { vgPlain_unimp("msync"); } |
| //__attribute__((weak)) void pause ( void ) { vgPlain_unimp("pause"); } |
| //__attribute__((weak)) void recvfrom ( void ) { vgPlain_unimp("recvfrom"); } |
| //__attribute__((weak)) void recvmsg ( void ) { vgPlain_unimp("recvmsg"); } |
| //__attribute__((weak)) void sendmsg ( void ) { vgPlain_unimp("sendmsg"); } |
| __attribute__((weak)) void tcdrain ( void ) { vgPlain_unimp("tcdrain"); } |
| //--//__attribute__((weak)) void vfork ( void ) { vgPlain_unimp("vfork"); } |
| |
| //__attribute__((weak)) void pthread_attr_getguardsize ( void ) |
| // { vgPlain_unimp("pthread_attr_getguardsize"); } |
| __attribute__((weak)) void pthread_attr_getstack ( void ) |
| { vgPlain_unimp("pthread_attr_getstack"); } |
| __attribute__((weak)) void pthread_attr_getstackaddr ( void ) |
| { vgPlain_unimp("pthread_attr_getstackaddr"); } |
| __attribute__((weak)) void pthread_attr_getstacksize ( void ) |
| { vgPlain_unimp("pthread_attr_getstacksize"); } |
| //__attribute__((weak)) void pthread_attr_setguardsize ( void ) |
| // { vgPlain_unimp("pthread_attr_setguardsize"); } |
| __attribute__((weak)) void pthread_attr_setstack ( void ) |
| { vgPlain_unimp("pthread_attr_setstack"); } |
| __attribute__((weak)) void pthread_attr_setstackaddr ( void ) |
| { vgPlain_unimp("pthread_attr_setstackaddr"); } |
| //__attribute__((weak)) void pthread_attr_setstacksize ( void ) |
| // { vgPlain_unimp("pthread_attr_setstacksize"); } |
| __attribute__((weak)) void pthread_getconcurrency ( void ) |
| { vgPlain_unimp("pthread_getconcurrency"); } |
| //__attribute__((weak)) void pthread_kill_other_threads_np ( void ) |
| // { vgPlain_unimp("pthread_kill_other_threads_np"); } |
| __attribute__((weak)) void pthread_mutexattr_getkind_np ( void ) |
| { vgPlain_unimp("pthread_mutexattr_getkind_np"); } |
| __attribute__((weak)) void pthread_mutexattr_getpshared ( void ) |
| { vgPlain_unimp("pthread_mutexattr_getpshared"); } |
| __attribute__((weak)) void pthread_mutexattr_gettype ( void ) |
| { vgPlain_unimp("pthread_mutexattr_gettype"); } |
| __attribute__((weak)) void pthread_mutexattr_setkind_np ( void ) |
| { vgPlain_unimp("pthread_mutexattr_setkind_np"); } |
| __attribute__((weak)) void pthread_mutexattr_setpshared ( void ) |
| { vgPlain_unimp("pthread_mutexattr_setpshared"); } |
| __attribute__((weak)) void pthread_setconcurrency ( void ) |
| { vgPlain_unimp("pthread_setconcurrency"); } |
| __attribute__((weak)) void pthread_spin_destroy ( void ) |
| { vgPlain_unimp("pthread_spin_destroy"); } |
| __attribute__((weak)) void pthread_spin_init ( void ) |
| { vgPlain_unimp("pthread_spin_init"); } |
| __attribute__((weak)) void pthread_spin_lock ( void ) |
| { vgPlain_unimp("pthread_spin_lock"); } |
| __attribute__((weak)) void pthread_spin_trylock ( void ) |
| { vgPlain_unimp("pthread_spin_trylock"); } |
| __attribute__((weak)) void pthread_spin_unlock ( void ) |
| { vgPlain_unimp("pthread_spin_unlock"); } |
| |
| |
| /*--------------------------------------------------------------------*/ |
| /*--- end vg_libpthread_unimp.c ---*/ |
| /*--------------------------------------------------------------------*/ |