__collector_timer_create_symver (int(real_timer_create) (), clockid_t clockid, struct sigevent *sevp,
timer_t *timerid);
+SYMVER_ATTRIBUTE (__collector_timer_create_2_3_3, timer_create@@GLIBC_2.3.3)
int
__collector_timer_create_2_3_3 (clockid_t clockid, struct sigevent *sevp,
timer_t *timerid)
TprintfT (DBG_LTT, "dispatcher: GLIBC: __collector_timer_create_2_3_3@%p\n", CALL_REAL (timer_create_2_3_3));
return __collector_timer_create_symver (CALL_REAL (timer_create_2_3_3), clockid, sevp, timerid);
}
-__asm__(".symver __collector_timer_create_2_3_3,timer_create@@GLIBC_2.3.3");
#endif /* ARCH(SPARC) || ARCH(Intel)*/
#if ARCH(SPARC)
+SYMVER_ATTRIBUTE (__collector_timer_create_2_2, timer_create@GLIBC_2.2)
int
__collector_timer_create_2_2 (clockid_t clockid, struct sigevent *sevp,
timer_t *timerid)
return __collector_timer_create_symver (CALL_REAL (timer_create_2_2), clockid, sevp, timerid);
}
-__asm__(".symver __collector_timer_create_2_2,timer_create@GLIBC_2.2");
-
#elif ARCH(Intel)
+SYMVER_ATTRIBUTE (__collector_timer_create_2_2_5, timer_create@GLIBC_2.2.5)
int
__collector_timer_create_2_2_5 (clockid_t clockid, struct sigevent *sevp,
timer_t *timerid)
TprintfT (DBG_LTT, "dispatcher: GLIBC: __collector_timer_create_2_2_5@%p\n", CALL_REAL (timer_create_2_2_5));
return __collector_timer_create_symver (CALL_REAL (timer_create_2_2_5), clockid, sevp, timerid);
}
-__asm__(".symver __collector_timer_create_2_2_5,timer_create@GLIBC_2.2.5");
#endif /* ARCH() */
#endif /* WSIZE(64) */
void *(*func)(void*),
void *arg);
+SYMVER_ATTRIBUTE (__collector_pthread_create_2_1, pthread_create@@GLIBC_2.1)
int
__collector_pthread_create_2_1 (pthread_t *thread,
const pthread_attr_t *attr,
return __collector_pthread_create_symver (CALL_REAL (pthread_create_2_1), thread, attr, func, arg);
}
+SYMVER_ATTRIBUTE (__collector_pthread_create_2_0, pthread_create@GLIBC_2.0)
int
__collector_pthread_create_2_0 (pthread_t *thread,
const pthread_attr_t *attr,
return __collector_pthread_create_symver (CALL_REAL (pthread_create_2_0), thread, attr, func, arg);
}
-__asm__(".symver __collector_pthread_create_2_1,pthread_create@@GLIBC_2.1");
-__asm__(".symver __collector_pthread_create_2_0,pthread_create@GLIBC_2.0");
-
#endif
#if ARCH(Intel) && WSIZE(32)
__collector_open64_symver (int(real_open64) (const char *, int, ...),
const char *path, int oflag, mode_t mode);
+SYMVER_ATTRIBUTE (__collector_open64_2_2, open64@@GLIBC_2.2)
int
__collector_open64_2_2 (const char *path, int oflag, ...)
{
return __collector_open64_symver (CALL_REAL (open64_2_2), path, oflag, mode);
}
+SYMVER_ATTRIBUTE (__collector_open64_2_1, open64@GLIBC_2.1)
int
__collector_open64_2_1 (const char *path, int oflag, ...)
{
return __collector_open64_symver (CALL_REAL (open64_2_1), path, oflag, mode);
}
-__asm__(".symver __collector_open64_2_2,open64@@GLIBC_2.2");
-__asm__(".symver __collector_open64_2_1,open64@GLIBC_2.1");
-
#endif /* ARCH(Intel) && WSIZE(32) */
#if WSIZE(32)
#if ARCH(Intel) && WSIZE(32)
static FILE*
__collector_fopen_symver (FILE*(real_fopen) (), const char *filename, const char *mode);
+SYMVER_ATTRIBUTE (__collector_fopen_2_1, fopen@@GLIBC_2.1)
FILE*
__collector_fopen_2_1 (const char *filename, const char *mode)
{
return __collector_fopen_symver (CALL_REAL (fopen_2_1), filename, mode);
}
+SYMVER_ATTRIBUTE (__collector_fopen_2_0, fopen@GLIBC_2.0)
FILE*
__collector_fopen_2_0 (const char *filename, const char *mode)
{
return __collector_fopen_symver (CALL_REAL (fopen_2_0), filename, mode);
}
-__asm__(".symver __collector_fopen_2_1,fopen@@GLIBC_2.1");
-__asm__(".symver __collector_fopen_2_0,fopen@GLIBC_2.0");
-
#endif
#if ARCH(Intel) && WSIZE(32)
static int
__collector_fclose_symver (int(real_fclose) (), FILE *stream);
+SYMVER_ATTRIBUTE (__collector_fclose_2_1, fclose@@GLIBC_2.1)
int
__collector_fclose_2_1 (FILE *stream)
{
return __collector_fclose_symver (CALL_REAL (fclose_2_1), stream);
}
+SYMVER_ATTRIBUTE (__collector_fclose_2_0, fclose@GLIBC_2.0)
int
__collector_fclose_2_0 (FILE *stream)
{
return __collector_fclose_symver (CALL_REAL (fclose_2_0), stream);
}
-__asm__(".symver __collector_fclose_2_1,fclose@@GLIBC_2.1");
-__asm__(".symver __collector_fclose_2_0,fclose@GLIBC_2.0");
-
#endif
#if ARCH(Intel) && WSIZE(32)
static FILE*
__collector_fdopen_symver (FILE*(real_fdopen) (), int fildes, const char *mode);
+SYMVER_ATTRIBUTE (__collector_fdopen_2_1, fdopen@@GLIBC_2.1)
FILE*
__collector_fdopen_2_1 (int fildes, const char *mode)
{
return __collector_fdopen_symver (CALL_REAL (fdopen_2_1), fildes, mode);
}
+SYMVER_ATTRIBUTE (__collector_fdopen_2_0, fdopen@GLIBC_2.0)
FILE*
__collector_fdopen_2_0 (int fildes, const char *mode)
{
return __collector_fdopen_symver (CALL_REAL (fdopen_2_0), fildes, mode);
}
-__asm__(".symver __collector_fdopen_2_1,fdopen@@GLIBC_2.1");
-__asm__(".symver __collector_fdopen_2_0,fdopen@GLIBC_2.0");
-
#endif
#if ARCH(Intel) && WSIZE(32)
static int
__collector_pread_symver (int(real_pread) (), int fildes, void *buf, size_t nbyte, off_t offset);
+SYMVER_ATTRIBUTE (__collector_pread_2_2, pread@@GLIBC_2.2)
int
__collector_pread_2_2 (int fildes, void *buf, size_t nbyte, off_t offset)
{
return __collector_pread_symver (CALL_REAL (pread_2_2), fildes, buf, nbyte, offset);
}
+SYMVER_ATTRIBUTE (__collector_pread_2_1, pread@GLIBC_2.1)
int
__collector_pread_2_1 (int fildes, void *buf, size_t nbyte, off_t offset)
{
return __collector_pread_symver (CALL_REAL (pread_2_1), fildes, buf, nbyte, offset);
}
-__asm__(".symver __collector_pread_2_2,pread@@GLIBC_2.2");
-__asm__(".symver __collector_pread_2_1,pread@GLIBC_2.1");
-
static int
__collector_pread_symver (int(real_pread) (), int fildes, void *buf, size_t nbyte, off_t offset)
{
static int
__collector_pwrite_symver (int(real_pwrite) (), int fildes, const void *buf, size_t nbyte, off_t offset);
+SYMVER_ATTRIBUTE (__collector_pwrite_2_2, pwrite@@GLIBC_2.2)
int
__collector_pwrite_2_2 (int fildes, const void *buf, size_t nbyte, off_t offset)
{
return __collector_pwrite_symver (CALL_REAL (pwrite_2_2), fildes, buf, nbyte, offset);
}
+SYMVER_ATTRIBUTE (__collector_pwrite_2_1, pwrite@GLIBC_2.1)
int
__collector_pwrite_2_1 (int fildes, const void *buf, size_t nbyte, off_t offset)
{
return __collector_pwrite_symver (CALL_REAL (pwrite_2_1), fildes, buf, nbyte, offset);
}
-__asm__(".symver __collector_pwrite_2_2,pwrite@@GLIBC_2.2");
-__asm__(".symver __collector_pwrite_2_1,pwrite@GLIBC_2.1");
-
static int
__collector_pwrite_symver (int(real_pwrite) (), int fildes, const void *buf, size_t nbyte, off_t offset)
{
static int
__collector_pwrite64_symver (int(real_pwrite64) (), int fildes, const void *buf, size_t nbyte, off64_t offset);
+SYMVER_ATTRIBUTE (__collector_pwrite64_2_2, pwrite64@@GLIBC_2.2)
int
__collector_pwrite64_2_2 (int fildes, const void *buf, size_t nbyte, off64_t offset)
{
return __collector_pwrite64_symver (CALL_REAL (pwrite64_2_2), fildes, buf, nbyte, offset);
}
+SYMVER_ATTRIBUTE (__collector_pwrite64_2_1, pwrite64@GLIBC_2.1)
int
__collector_pwrite64_2_1 (int fildes, const void *buf, size_t nbyte, off64_t offset)
{
return __collector_pwrite64_symver (CALL_REAL (pwrite64_2_1), fildes, buf, nbyte, offset);
}
-__asm__(".symver __collector_pwrite64_2_2,pwrite64@@GLIBC_2.2");
-__asm__(".symver __collector_pwrite64_2_1,pwrite64@GLIBC_2.1");
-
static int
__collector_pwrite64_symver (int(real_pwrite64) (), int fildes, const void *buf, size_t nbyte, off64_t offset)
{
static int
__collector_fgetpos_symver (int(real_fgetpos) (), FILE *stream, fpos_t *pos);
+SYMVER_ATTRIBUTE (__collector_fgetpos_2_2, fgetpos@@GLIBC_2.2)
int
__collector_fgetpos_2_2 (FILE *stream, fpos_t *pos)
{
return __collector_fgetpos_symver (CALL_REAL (fgetpos_2_2), stream, pos);
}
+SYMVER_ATTRIBUTE (__collector_fgetpos_2_0, fgetpos@GLIBC_2.0)
int
__collector_fgetpos_2_0 (FILE *stream, fpos_t *pos)
{
TprintfT (DBG_LTT, "iotrace: __collector_fgetpos_2_0@%p\n", CALL_REAL (fgetpos_2_0));
return __collector_fgetpos_symver (CALL_REAL (fgetpos_2_0), stream, pos);
}
-
-__asm__(".symver __collector_fgetpos_2_2,fgetpos@@GLIBC_2.2");
-__asm__(".symver __collector_fgetpos_2_0,fgetpos@GLIBC_2.0");
#endif
#if ARCH(Intel) && WSIZE(32)
static int
__collector_fgetpos64_symver (int(real_fgetpos64) (), FILE *stream, fpos64_t *pos);
+SYMVER_ATTRIBUTE (__collector_fgetpos64_2_2, fgetpos64@@GLIBC_2.2)
int
__collector_fgetpos64_2_2 (FILE *stream, fpos64_t *pos)
{
return __collector_fgetpos64_symver (CALL_REAL (fgetpos64_2_2), stream, pos);
}
+SYMVER_ATTRIBUTE (__collector_fgetpos64_2_1, fgetpos64@GLIBC_2.1)
int
__collector_fgetpos64_2_1 (FILE *stream, fpos64_t *pos)
{
return __collector_fgetpos64_symver (CALL_REAL (fgetpos64_2_1), stream, pos);
}
-__asm__(".symver __collector_fgetpos64_2_2,fgetpos64@@GLIBC_2.2");
-__asm__(".symver __collector_fgetpos64_2_1,fgetpos64@GLIBC_2.1");
-
static int
__collector_fgetpos64_symver (int(real_fgetpos64) (), FILE *stream, fpos64_t *pos)
{
static int
__collector_fsetpos_symver (int(real_fsetpos) (), FILE *stream, const fpos_t *pos);
+SYMVER_ATTRIBUTE (__collector_fsetpos_2_2, fsetpos@@GLIBC_2.2)
int
__collector_fsetpos_2_2 (FILE *stream, const fpos_t *pos)
{
return __collector_fsetpos_symver (CALL_REAL (fsetpos_2_2), stream, pos);
}
+SYMVER_ATTRIBUTE (__collector_fsetpos_2_0, fsetpos@GLIBC_2.0)
int
__collector_fsetpos_2_0 (FILE *stream, const fpos_t *pos)
{
TprintfT (DBG_LTT, "iotrace: __collector_fsetpos_2_0@%p\n", CALL_REAL (fsetpos_2_0));
return __collector_fsetpos_symver (CALL_REAL (fsetpos_2_0), stream, pos);
}
-
-__asm__(".symver __collector_fsetpos_2_2,fsetpos@@GLIBC_2.2");
-__asm__(".symver __collector_fsetpos_2_0,fsetpos@GLIBC_2.0");
#endif
#if ARCH(Intel) && WSIZE(32)
static int
__collector_fsetpos64_symver (int(real_fsetpos64) (), FILE *stream, const fpos64_t *pos);
+SYMVER_ATTRIBUTE (__collector_fsetpos64_2_2, fsetpos64@@GLIBC_2.2)
int
__collector_fsetpos64_2_2 (FILE *stream, const fpos64_t *pos)
{
return __collector_fsetpos64_symver (CALL_REAL (fsetpos64_2_2), stream, pos);
}
+SYMVER_ATTRIBUTE (__collector_fsetpos64_2_1, fsetpos64@GLIBC_2.1)
int
__collector_fsetpos64_2_1 (FILE *stream, const fpos64_t *pos)
{
return __collector_fsetpos64_symver (CALL_REAL (fsetpos64_2_1), stream, pos);
}
-__asm__(".symver __collector_fsetpos64_2_2,fsetpos64@@GLIBC_2.2");
-__asm__(".symver __collector_fsetpos64_2_1,fsetpos64@GLIBC_2.1");
-
static int
__collector_fsetpos64_symver (int(real_fsetpos64) (), FILE *stream, const fpos64_t *pos)
{
const posix_spawnattr_t *attrp,
char *const argv[], char *const envp[]);
+SYMVER_ATTRIBUTE (__collector_posix_spawn_2_15, posix_spawn@@GLIBC_2.15)
int
__collector_posix_spawn_2_15 (pid_t *pidp, const char *path,
const posix_spawn_file_actions_t *file_actions,
path, file_actions, attrp, argv, envp);
}
-__asm__(".symver __collector_posix_spawn_2_15,posix_spawn@@GLIBC_2.15");
-
#if WSIZE(32)
+SYMVER_ATTRIBUTE (__collector_posix_spawn_2_2, posix_spawn@GLIBC_2.2)
int
__collector_posix_spawn_2_2 (pid_t *pidp, const char *path,
const posix_spawn_file_actions_t *file_actions,
path, file_actions, attrp, argv, envp);
}
-__asm__(".symver __collector_posix_spawn_2_2,posix_spawn@GLIBC_2.2");
-
#else /* ^WSIZE(32) */
+SYMVER_ATTRIBUTE (__collector_posix_spawn_2_2_5, posix_spawn@GLIBC_2.2.5)
int
__collector_posix_spawn_2_2_5 (pid_t *pidp, const char *path,
const posix_spawn_file_actions_t *file_actions,
return __collector_posix_spawn_symver (CALL_REAL (posix_spawn_2_2_5), pidp,
path, file_actions, attrp, argv, envp);
}
-
-__asm__(".symver __collector_posix_spawn_2_2_5,posix_spawn@GLIBC_2.2.5");
#endif /* ^WSIZE(32) */
static int
const posix_spawnattr_t *attrp,
char *const argv[], char *const envp[]);
+SYMVER_ATTRIBUTE (__collector_posix_spawnp_2_15, posix_spawnp@@GLIBC_2.15)
int // Common interposition
__collector_posix_spawnp_2_15 (pid_t *pidp, const char *path,
const posix_spawn_file_actions_t *file_actions,
path, file_actions, attrp, argv, envp);
}
-__asm__(".symver __collector_posix_spawnp_2_15,posix_spawnp@@GLIBC_2.15");
-
#if WSIZE(32)
+SYMVER_ATTRIBUTE (__collector_posix_spawnp_2_2, posix_spawnp@GLIBC_2.2)
int
__collector_posix_spawnp_2_2 (pid_t *pidp, const char *path,
const posix_spawn_file_actions_t *file_actions,
path, file_actions, attrp, argv, envp);
}
-__asm__(".symver __collector_posix_spawnp_2_2,posix_spawnp@GLIBC_2.2");
-
#else /* ^WSIZE(32) */
+SYMVER_ATTRIBUTE (__collector_posix_spawnp_2_2_5, posix_spawnp@GLIBC_2.2.5)
int
__collector_posix_spawnp_2_2_5 (pid_t *pidp, const char *path,
const posix_spawn_file_actions_t *file_actions,
path, file_actions, attrp, argv, envp);
}
-__asm__(".symver __collector_posix_spawnp_2_2_5,posix_spawnp@GLIBC_2.2.5");
-
#endif /* ^WSIZE(32) */
static int
static FILE *
__collector_popen_symver (FILE*(real_popen) (), const char *cmd, const char *mode);
+SYMVER_ATTRIBUTE (__collector_popen_2_1, popen@@GLIBC_2.1)
FILE *
__collector_popen_2_1 (const char *cmd, const char *mode)
{
return __collector_popen_symver (CALL_REALF (popen_2_1), cmd, mode);
}
+SYMVER_ATTRIBUTE (__collector_popen_2_0, popen@GLIBC_2.0)
FILE *
__collector_popen_2_0 (const char *cmd, const char *mode)
{
return __collector_popen_symver (CALL_REALF (popen_2_0), cmd, mode);
}
+SYMVER_ATTRIBUTE (__collector__popen_2_1, _popen@@GLIBC_2.1)
FILE *
__collector__popen_2_1 (const char *cmd, const char *mode)
{
return __collector_popen_symver (CALL_REALF (popen_2_1), cmd, mode);
}
+SYMVER_ATTRIBUTE (__collector__popen_2_0, _popen@GLIBC_2.0)
FILE *
__collector__popen_2_0 (const char *cmd, const char *mode)
{
init_lineage_intf ();
return __collector_popen_symver (CALL_REALF (popen_2_0), cmd, mode);
}
-
-__asm__(".symver __collector_popen_2_1,popen@@GLIBC_2.1");
-__asm__(".symver __collector_popen_2_0,popen@GLIBC_2.0");
-__asm__(".symver __collector__popen_2_1,_popen@@GLIBC_2.1");
-__asm__(".symver __collector__popen_2_0,_popen@GLIBC_2.0");
#else // WSIZE(64)
FILE * popen () __attribute__ ((weak, alias ("__collector_popen")));
#endif
static void *
__collector_dlopen_symver (void*(real_dlopen) (), void *caller, const char *pathname, int mode);
+SYMVER_ATTRIBUTE (__collector_dlopen_2_1, dlopen@@GLIBC_2.1)
void *
__collector_dlopen_2_1 (const char *pathname, int mode)
{
return __collector_dlopen_symver (CALL_REAL (dlopen_2_1), caller, pathname, mode);
}
+SYMVER_ATTRIBUTE (__collector_dlopen_2_0, dlopen@GLIBC_2.0)
void *
__collector_dlopen_2_0 (const char *pathname, int mode)
{
void* caller = __builtin_return_address (0); // must be called inside dlopen first layer interpostion
return __collector_dlopen_symver (CALL_REAL (dlopen_2_0), caller, pathname, mode);
}
-
-__asm__(".symver __collector_dlopen_2_1,dlopen@@GLIBC_2.1");
-__asm__(".symver __collector_dlopen_2_0,dlopen@GLIBC_2.0");
-
#endif
#if (ARCH(Intel) && WSIZE(32)) || ARCH(SPARC)
static int
__collector_pthread_cond_wait_symver (int(real_pthread_cond_wait) (), pthread_cond_t *cond, pthread_mutex_t *mutex);
+#if ARCH(Intel) || ARCH(SPARC)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_wait_2_3_2,
+ pthread_cond_wait@@GLIBC_2.3.2)
+#endif
int
__collector_pthread_cond_wait_2_3_2 (pthread_cond_t *cond, pthread_mutex_t *mutex)
{
return __collector_pthread_cond_wait_symver (CALL_REAL (pthread_cond_wait_2_3_2), cond, mutex);
}
-#if ARCH(Intel) || ARCH(SPARC)
-__asm__(".symver __collector_pthread_cond_wait_2_3_2,pthread_cond_wait@@GLIBC_2.3.2");
-#endif
-
#if WSIZE(32)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_wait_2_0,
+ pthread_cond_wait@GLIBC_2.0)
int
__collector_pthread_cond_wait_2_0 (pthread_cond_t *cond, pthread_mutex_t *mutex)
{
TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_wait_2_0@%p\n", CALL_REAL (pthread_cond_wait_2_0));
return __collector_pthread_cond_wait_symver (CALL_REAL (pthread_cond_wait_2_0), cond, mutex);
}
-
-__asm__(".symver __collector_pthread_cond_wait_2_0,pthread_cond_wait@GLIBC_2.0");
-
#else // WSIZE(64)
#if ARCH(Intel)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_wait_2_2_5,
+ pthread_cond_wait@GLIBC_2.2.5)
int
__collector_pthread_cond_wait_2_2_5 (pthread_cond_t *cond, pthread_mutex_t *mutex)
{
TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_wait_2_2_5@%p\n", CALL_REAL (pthread_cond_wait_2_2_5));
return __collector_pthread_cond_wait_symver (CALL_REAL (pthread_cond_wait_2_2_5), cond, mutex);
}
-
-__asm__(".symver __collector_pthread_cond_wait_2_2_5,pthread_cond_wait@GLIBC_2.2.5");
#elif ARCH(SPARC)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_wait_2_2,
+ pthread_cond_wait@GLIBC_2.2)
int
__collector_pthread_cond_wait_2_2 (pthread_cond_t *cond, pthread_mutex_t *mutex)
{
TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_wait_2_2@%p\n", CALL_REAL (pthread_cond_wait_2_2));
return __collector_pthread_cond_wait_symver (CALL_REAL (pthread_cond_wait_2_2), cond, mutex);
}
-
-__asm__(".symver __collector_pthread_cond_wait_2_2,pthread_cond_wait@GLIBC_2.2");
#endif // ARCH()
#endif // WSIZE()
pthread_mutex_t *mutex,
const struct timespec *abstime);
+#if ARCH(Intel) || ARCH(SPARC)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_timedwait_2_3_2,
+ pthread_cond_timedwait@@GLIBC_2.3.2)
+#endif // ARCH()
int
__collector_pthread_cond_timedwait_2_3_2 (pthread_cond_t *cond,
pthread_mutex_t *mutex,
return __collector_pthread_cond_timedwait_symver (CALL_REAL (pthread_cond_timedwait_2_3_2), cond, mutex, abstime);
}
-#if ARCH(Intel) || ARCH(SPARC)
-__asm__(".symver __collector_pthread_cond_timedwait_2_3_2,pthread_cond_timedwait@@GLIBC_2.3.2");
-#endif // ARCH()
-
#if WSIZE(32)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_timedwait_2_0,
+ pthread_cond_timedwait@GLIBC_2.0)
int
__collector_pthread_cond_timedwait_2_0 (pthread_cond_t *cond,
pthread_mutex_t *mutex,
TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_timedwait_2_0@%p\n", CALL_REAL (pthread_cond_timedwait_2_0));
return __collector_pthread_cond_timedwait_symver (CALL_REAL (pthread_cond_timedwait_2_0), cond, mutex, abstime);
}
-
-__asm__(".symver __collector_pthread_cond_timedwait_2_0,pthread_cond_timedwait@GLIBC_2.0");
-
#else // WSIZE(64)
#if ARCH(Intel)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_timedwait_2_2_5,
+ pthread_cond_timedwait@GLIBC_2.2.5)
int
__collector_pthread_cond_timedwait_2_2_5 (pthread_cond_t *cond,
pthread_mutex_t *mutex,
TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_timedwait_2_2_5@%p\n", CALL_REAL (pthread_cond_timedwait_2_2_5));
return __collector_pthread_cond_timedwait_symver (CALL_REAL (pthread_cond_timedwait_2_2_5), cond, mutex, abstime);
}
-
-__asm__(".symver __collector_pthread_cond_timedwait_2_2_5,pthread_cond_timedwait@GLIBC_2.2.5");
#elif ARCH(SPARC)
+SYMVER_ATTRIBUTE (__collector_pthread_cond_timedwait_2_2,
+ pthread_cond_timedwait@GLIBC_2.2)
int
__collector_pthread_cond_timedwait_2_2 (pthread_cond_t *cond,
pthread_mutex_t *mutex,
TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_pthread_cond_timedwait_2_2@%p\n", CALL_REAL (pthread_cond_timedwait_2_2));
return __collector_pthread_cond_timedwait_symver (CALL_REAL (pthread_cond_timedwait_2_2), cond, mutex, abstime);
}
-
-__asm__(".symver __collector_pthread_cond_timedwait_2_2,pthread_cond_timedwait@GLIBC_2.2");
#endif // ARCH()
#endif // WSIZE()
static int
__collector_sem_wait_symver (int(real_sem_wait) (), sem_t *sp);
+SYMVER_ATTRIBUTE (__collector_sem_wait_2_1, sem_wait@@GLIBC_2.1)
int
__collector_sem_wait_2_1 (sem_t *sp)
{
return __collector_sem_wait_symver (CALL_REAL (sem_wait_2_1), sp);
}
+SYMVER_ATTRIBUTE (__collector_sem_wait_2_0, sem_wait@GLIBC_2.0)
int
__collector_sem_wait_2_0 (sem_t *sp)
{
TprintfT (DBG_LTT, "linetrace: GLIBC: __collector_sem_wait_2_0@%p\n", CALL_REAL (sem_wait_2_0));
return __collector_sem_wait_symver (CALL_REAL (sem_wait_2_0), sp);
}
-
-__asm__(".symver __collector_sem_wait_2_1,sem_wait@@GLIBC_2.1");
-__asm__(".symver __collector_sem_wait_2_0,sem_wait@GLIBC_2.0");
#endif
#if ARCH(Intel) && WSIZE(32)
}
#endif
+#ifdef __has_attribute
+# if __has_attribute (__symver__)
+# define SYMVER_ATTRIBUTE(sym, symver) \
+ __attribute__ ((__symver__ (#symver)))
+# endif
+#endif
+#ifndef SYMVER_ATTRIBUTE
+# define SYMVER_ATTRIBUTE(sym, symver) \
+ __asm__(".symver " #sym "," #symver);
+#endif
+
#endif /* _COLLECTOR_MODULE_H */