glibc/nptl/Versions
Florian Weimer 508ee037a3 nptl: Use out-of-line wake function in __libc_lock_unlock slow path
This slightly reduces code size, as can be seen below.
__libc_lock_unlock is usually used along with __libc_lock_lock in
the same function.  __libc_lock_lock already has an out-of-line
slow path, so this change should not introduce many additional
non-leaf functions.

This change also fixes a link failure in 32-bit Arm thumb mode
because commit 1f9c804fbd
("nptl: Use internal low-level lock type for !IS_IN (libc)")
introduced __libc_do_syscall calls outside of libc.

Before x86-64:

   text	   data	    bss	    dec	    hex	filename
1937748	  20456	  54896	2013100	 1eb7ac	libc.so.6
  25601	    856	  12768	  39225	   9939	nss/libnss_db.so.2
  40310	    952	  25144	  66406	  10366	nss/libnss_files.so.2

After x86-64:
   text	   data	    bss	    dec	    hex	filename
1935312	  20456	  54896	2010664	 1eae28	libc.so.6
  25559	    864	  12768	  39191	   9917	nss/libnss_db.so.2
  39764	    960	  25144	  65868	  1014c	nss/libnss_files.so.2

Before i686:

2110961	  11272	  39144	2161377	 20fae1	libc.so.6
  27243	    428	  12652	  40323	   9d83	nss/libnss_db.so.2
  43062	    476	  25028	  68566	  10bd6	nss/libnss_files.so.2

After i686:

2107347	  11272	  39144	2157763	 20ecc3	libc.so.6
  26929	    432	  12652	  40013	   9c4d	nss/libnss_db.so.2
  43132	    480	  25028	  68640	  10c20	nss/libnss_files.so.2

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
2021-07-09 10:59:22 +02:00

536 lines
12 KiB
Plaintext

libc {
GLIBC_2.0 {
__pthread_getspecific;
__pthread_key_create;
__pthread_mutex_destroy;
__pthread_mutex_init;
__pthread_mutex_lock;
__pthread_mutex_trylock;
__pthread_mutex_unlock;
__pthread_mutexattr_destroy;
__pthread_mutexattr_init;
__pthread_mutexattr_settype;
__pthread_once;
__pthread_setspecific;
_pthread_cleanup_pop;
_pthread_cleanup_pop_restore;
_pthread_cleanup_push;
_pthread_cleanup_push_defer;
pthread_atfork;
pthread_attr_destroy;
pthread_attr_getdetachstate;
pthread_attr_getinheritsched;
pthread_attr_getschedparam;
pthread_attr_getschedpolicy;
pthread_attr_getscope;
pthread_attr_init;
pthread_attr_setdetachstate;
pthread_attr_setinheritsched;
pthread_attr_setschedparam;
pthread_attr_setschedpolicy;
pthread_attr_setscope;
pthread_cancel;
pthread_cond_broadcast;
pthread_cond_destroy;
pthread_cond_init;
pthread_cond_signal;
pthread_cond_timedwait;
pthread_cond_wait;
pthread_condattr_destroy;
pthread_condattr_init;
pthread_create;
pthread_detach;
pthread_equal;
pthread_exit;
pthread_getschedparam;
pthread_getspecific;
pthread_join;
pthread_key_create;
pthread_key_delete;
pthread_kill;
pthread_kill_other_threads_np;
pthread_mutex_destroy;
pthread_mutex_init;
pthread_mutex_lock;
pthread_mutex_trylock;
pthread_mutex_unlock;
pthread_mutexattr_destroy;
pthread_mutexattr_getkind_np;
pthread_mutexattr_init;
pthread_mutexattr_setkind_np;
pthread_once;
pthread_self;
pthread_setcancelstate;
pthread_setcanceltype;
pthread_setschedparam;
pthread_setspecific;
pthread_sigmask;
pthread_testcancel;
sem_destroy;
sem_getvalue;
sem_init;
sem_post;
sem_trywait;
sem_wait;
}
GLIBC_2.1 {
pthread_attr_getguardsize;
pthread_attr_getstackaddr;
pthread_attr_getstacksize;
pthread_attr_init;
pthread_attr_setguardsize;
pthread_attr_setstackaddr;
pthread_attr_setstacksize;
pthread_create;
pthread_getconcurrency;
pthread_mutexattr_gettype;
pthread_mutexattr_settype;
pthread_rwlock_destroy;
pthread_rwlock_init;
pthread_rwlock_rdlock;
pthread_rwlock_tryrdlock;
pthread_rwlock_trywrlock;
pthread_rwlock_unlock;
pthread_rwlock_wrlock;
pthread_rwlockattr_destroy;
pthread_rwlockattr_getkind_np;
pthread_rwlockattr_getpshared;
pthread_rwlockattr_init;
pthread_rwlockattr_setkind_np;
pthread_rwlockattr_setpshared;
pthread_setconcurrency;
sem_destroy;
sem_getvalue;
sem_init;
sem_post;
sem_trywait;
sem_wait;
}
GLIBC_2.1.1 {
sem_close;
sem_open;
sem_unlink;
}
GLIBC_2.2 {
__pthread_rwlock_destroy;
__pthread_rwlock_init;
__pthread_rwlock_rdlock;
__pthread_rwlock_tryrdlock;
__pthread_rwlock_trywrlock;
__pthread_rwlock_unlock;
__pthread_rwlock_wrlock;
pthread_attr_getstack;
pthread_attr_setstack;
pthread_barrier_destroy;
pthread_barrier_init;
pthread_barrier_wait;
pthread_barrierattr_destroy;
pthread_barrierattr_init;
pthread_barrierattr_setpshared;
pthread_condattr_getpshared;
pthread_condattr_setpshared;
pthread_getcpuclockid;
pthread_mutex_timedlock;
pthread_mutexattr_getpshared;
pthread_mutexattr_setpshared;
pthread_rwlock_timedrdlock;
pthread_rwlock_timedwrlock;
pthread_spin_destroy;
pthread_spin_init;
pthread_spin_lock;
pthread_spin_trylock;
pthread_spin_unlock;
pthread_yield;
sem_timedwait;
}
GLIBC_2.2.3 {
pthread_getattr_np;
}
GLIBC_2.3.2 {
__register_atfork;
pthread_cond_broadcast;
pthread_cond_destroy;
pthread_cond_init;
pthread_cond_signal;
pthread_cond_timedwait;
pthread_cond_wait;
}
GLIBC_2.3.3 {
__pthread_cleanup_routine;
__pthread_register_cancel;
__pthread_register_cancel_defer;
__pthread_unregister_cancel;
__pthread_unregister_cancel_restore;
__pthread_unwind_next;
pthread_attr_getaffinity_np;
pthread_attr_setaffinity_np;
pthread_barrierattr_getpshared;
pthread_condattr_getclock;
pthread_condattr_setclock;
pthread_getaffinity_np;
pthread_setaffinity_np;
pthread_timedjoin_np;
pthread_tryjoin_np;
}
GLIBC_2.3.4 {
pthread_attr_getaffinity_np;
pthread_attr_setaffinity_np;
pthread_getaffinity_np;
pthread_setaffinity_np;
pthread_setschedprio;
}
GLIBC_2.4 {
pthread_mutex_consistent_np;
pthread_mutex_getprioceiling;
pthread_mutex_setprioceiling;
pthread_mutexattr_getprioceiling;
pthread_mutexattr_getprotocol;
pthread_mutexattr_getrobust_np;
pthread_mutexattr_setprioceiling;
pthread_mutexattr_setprotocol;
pthread_mutexattr_setrobust_np;
}
GLIBC_2.11 {
pthread_sigqueue;
}
GLIBC_2.12 {
pthread_getname_np;
pthread_mutex_consistent;
pthread_mutexattr_getrobust;
pthread_mutexattr_setrobust;
pthread_setname_np;
}
GLIBC_2.18 {
pthread_getattr_default_np;
pthread_setattr_default_np;
}
# C11 thread symbols.
GLIBC_2.28 {
call_once;
cnd_broadcast;
cnd_destroy;
cnd_init;
cnd_signal;
cnd_timedwait;
cnd_wait;
mtx_destroy;
mtx_init;
mtx_lock;
mtx_timedlock;
mtx_trylock;
mtx_unlock;
thrd_current;
thrd_create;
thrd_detach;
thrd_equal;
thrd_exit;
thrd_join;
thrd_sleep;
thrd_yield;
tss_create;
tss_delete;
tss_get;
tss_set;
}
GLIBC_2.30 {
pthread_cond_clockwait;
pthread_mutex_clocklock;
pthread_rwlock_clockrdlock;
pthread_rwlock_clockwrlock;
sem_clockwait;
}
GLIBC_2.31 {
pthread_clockjoin_np;
}
GLIBC_2.32 {
pthread_attr_getsigmask_np;
pthread_attr_setaffinity_np;
pthread_attr_setsigmask_np;
pthread_getaffinity_np;
pthread_getattr_np;
pthread_sigmask;
}
GLIBC_2.34 {
__pthread_cleanup_routine;
__pthread_key_create;
__pthread_register_cancel;
__pthread_register_cancel_defer;
__pthread_unregister_cancel;
__pthread_unregister_cancel_restore;
__pthread_unwind_next;
_pthread_cleanup_pop;
_pthread_cleanup_push;
call_once;
cnd_broadcast;
cnd_destroy;
cnd_init;
cnd_signal;
cnd_timedwait;
cnd_wait;
mtx_destroy;
mtx_init;
mtx_lock;
mtx_timedlock;
mtx_trylock;
mtx_unlock;
pthread_attr_getaffinity_np;
pthread_attr_getguardsize;
pthread_attr_getstack;
pthread_attr_getstackaddr;
pthread_attr_getstacksize;
pthread_attr_setguardsize;
pthread_attr_setstack;
pthread_attr_setstackaddr;
pthread_attr_setstacksize;
pthread_barrier_destroy;
pthread_barrier_init;
pthread_barrier_wait;
pthread_barrierattr_destroy;
pthread_barrierattr_getpshared;
pthread_barrierattr_init;
pthread_barrierattr_setpshared;
pthread_cancel;
pthread_clockjoin_np;
pthread_cond_clockwait;
pthread_condattr_getclock;
pthread_condattr_getpshared;
pthread_condattr_setclock;
pthread_condattr_setpshared;
pthread_create;
pthread_detach;
pthread_getattr_default_np;
pthread_getconcurrency;
pthread_getcpuclockid;
pthread_getname_np;
pthread_getspecific;
pthread_join;
pthread_key_create;
pthread_key_delete;
pthread_kill;
pthread_mutex_clocklock;
pthread_mutex_consistent;
pthread_mutex_getprioceiling;
pthread_mutex_setprioceiling;
pthread_mutex_timedlock;
pthread_mutex_trylock;
pthread_mutexattr_destroy;
pthread_mutexattr_getprioceiling;
pthread_mutexattr_getprotocol;
pthread_mutexattr_getpshared;
pthread_mutexattr_getrobust;
pthread_mutexattr_gettype;
pthread_mutexattr_init;
pthread_mutexattr_setprioceiling;
pthread_mutexattr_setprotocol;
pthread_mutexattr_setpshared;
pthread_mutexattr_setrobust;
pthread_mutexattr_settype;
pthread_once;
pthread_rwlock_clockrdlock;
pthread_rwlock_clockwrlock;
pthread_rwlock_destroy;
pthread_rwlock_init;
pthread_rwlock_rdlock;
pthread_rwlock_timedrdlock;
pthread_rwlock_timedwrlock;
pthread_rwlock_tryrdlock;
pthread_rwlock_trywrlock;
pthread_rwlock_unlock;
pthread_rwlock_wrlock;
pthread_rwlockattr_destroy;
pthread_rwlockattr_getkind_np;
pthread_rwlockattr_getpshared;
pthread_rwlockattr_init;
pthread_rwlockattr_setkind_np;
pthread_rwlockattr_setpshared;
pthread_setaffinity_np;
pthread_setattr_default_np;
pthread_setconcurrency;
pthread_setname_np;
pthread_setschedprio;
pthread_setspecific;
pthread_sigqueue;
pthread_spin_destroy;
pthread_spin_init;
pthread_spin_lock;
pthread_spin_trylock;
pthread_spin_unlock;
pthread_testcancel;
pthread_timedjoin_np;
pthread_tryjoin_np;
sem_clockwait;
sem_close;
sem_destroy;
sem_getvalue;
sem_init;
sem_open;
sem_post;
sem_timedwait;
sem_trywait;
sem_unlink;
sem_wait;
thrd_create;
thrd_detach;
thrd_exit;
thrd_join;
tss_create;
tss_delete;
tss_get;
tss_set;
}
GLIBC_PRIVATE {
__libc_alloca_cutoff;
__lll_lock_wake_private;
__lll_lock_wait_private;
__nptl_create_event;
__nptl_death_event;
__nptl_last_event;
__nptl_nthreads;
__nptl_rtld_global;
__nptl_threads_events;
__nptl_version;
__pthread_get_minstack;
__pthread_keys;
_thread_db___nptl_last_event;
_thread_db___nptl_nthreads;
_thread_db___nptl_rtld_global;
_thread_db___pthread_keys;
_thread_db_const_thread_area;
_thread_db_dtv_dtv;
_thread_db_dtv_slotinfo_gen;
_thread_db_dtv_slotinfo_list_len;
_thread_db_dtv_slotinfo_list_next;
_thread_db_dtv_slotinfo_list_slotinfo;
_thread_db_dtv_slotinfo_map;
_thread_db_dtv_t_counter;
_thread_db_dtv_t_pointer_val;
_thread_db_link_map_l_tls_modid;
_thread_db_link_map_l_tls_offset;
_thread_db_list_t_next;
_thread_db_list_t_prev;
_thread_db_pthread_cancelhandling;
_thread_db_pthread_dtvp;
_thread_db_pthread_eventbuf;
_thread_db_pthread_eventbuf_eventmask;
_thread_db_pthread_eventbuf_eventmask_event_bits;
_thread_db_pthread_key_data_data;
_thread_db_pthread_key_data_level2_data;
_thread_db_pthread_key_data_seq;
_thread_db_pthread_key_struct_destr;
_thread_db_pthread_key_struct_seq;
_thread_db_pthread_list;
_thread_db_pthread_nextevent;
_thread_db_pthread_report_events;
_thread_db_pthread_schedparam_sched_priority;
_thread_db_pthread_schedpolicy;
_thread_db_pthread_specific;
_thread_db_pthread_start_routine;
_thread_db_pthread_tid;
_thread_db_register32;
_thread_db_register32_thread_area;
_thread_db_register64;
_thread_db_register64_thread_area;
_thread_db_rtld_global__dl_stack_used;
_thread_db_rtld_global__dl_stack_user;
_thread_db_rtld_global__dl_tls_dtv_slotinfo_list;
_thread_db_sizeof_dtv_slotinfo;
_thread_db_sizeof_dtv_slotinfo_list;
_thread_db_sizeof_list_t;
_thread_db_sizeof_pthread;
_thread_db_sizeof_pthread_key_data;
_thread_db_sizeof_pthread_key_data_level2;
_thread_db_sizeof_pthread_key_struct;
_thread_db_sizeof_td_eventbuf_t;
_thread_db_sizeof_td_thr_events_t;
_thread_db_td_eventbuf_t_eventdata;
_thread_db_td_eventbuf_t_eventnum;
_thread_db_td_thr_events_t_event_bits;
}
}
libpthread {
GLIBC_2.0 {
__libpthread_version_placeholder;
}
GLIBC_2.1 {
__libpthread_version_placeholder;
}
GLIBC_2.1.1 {
__libpthread_version_placeholder;
}
GLIBC_2.1.2 {
__libpthread_version_placeholder;
}
GLIBC_2.2 {
__libpthread_version_placeholder;
}
GLIBC_2.2.3 {
__libpthread_version_placeholder;
}
GLIBC_2.2.6 {
__libpthread_version_placeholder;
}
GLIBC_2.3.2 {
__libpthread_version_placeholder;
}
GLIBC_2.3.3 {
__libpthread_version_placeholder;
}
GLIBC_2.3.4 {
__libpthread_version_placeholder;
}
GLIBC_2.4 {
__libpthread_version_placeholder;
};
GLIBC_2.11 {
__libpthread_version_placeholder;
};
GLIBC_2.12 {
__libpthread_version_placeholder;
};
GLIBC_2.13 {
}
GLIBC_2.18 {
__libpthread_version_placeholder;
}
GLIBC_2.19 {
}
GLIBC_2.28 {
__libpthread_version_placeholder;
}
GLIBC_2.29 {
}
GLIBC_2.30 {
__libpthread_version_placeholder;
}
GLIBC_2.31 {
__libpthread_version_placeholder;
}
}
ld {
GLIBC_PRIVATE {
__nptl_initial_report_events;
__nptl_set_robust_list_avail;
}
}