mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
nptl: Export libthread_db-used symbols under GLIBC_PRIVATE
This allows distributions to strip debugging information from libc.so.6 without impacting the debugging experience. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
parent
b369cc4e9c
commit
fef400a2f9
@ -403,10 +403,14 @@ libc {
|
||||
__nptl_deallocate_tsd;
|
||||
__nptl_death_event;
|
||||
__nptl_free_tcb;
|
||||
__nptl_last_event;
|
||||
__nptl_nthreads;
|
||||
__nptl_rtld_global;
|
||||
__nptl_setxid_sighandler;
|
||||
__nptl_stack_list_add;
|
||||
__nptl_stack_list_del;
|
||||
__nptl_threads_events;
|
||||
__nptl_version;
|
||||
__pthread_attr_copy;
|
||||
__pthread_attr_destroy;
|
||||
__pthread_attr_init;
|
||||
@ -430,6 +434,60 @@ libc {
|
||||
__pthread_unwind;
|
||||
__sched_fifo_max_prio;
|
||||
__sched_fifo_min_prio;
|
||||
_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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -43,21 +43,24 @@
|
||||
|
||||
|
||||
/* Globally enabled events. */
|
||||
static td_thr_events_t __nptl_threads_events __attribute_used__;
|
||||
td_thr_events_t __nptl_threads_events __attribute__ ((nocommon));
|
||||
libc_hidden_proto (__nptl_threads_events)
|
||||
libc_hidden_data_def (__nptl_threads_events)
|
||||
|
||||
/* Pointer to descriptor with the last event. */
|
||||
static struct pthread *__nptl_last_event __attribute_used__;
|
||||
struct pthread *__nptl_last_event __attribute__ ((nocommon));
|
||||
libc_hidden_proto (__nptl_last_event)
|
||||
libc_hidden_data_def (__nptl_last_event)
|
||||
|
||||
#ifdef SHARED
|
||||
/* This variable is used to access _rtld_global from libthread_db. If
|
||||
GDB loads libpthread before ld.so, it is not possible to resolve
|
||||
_rtld_global directly during libpthread initialization. */
|
||||
static struct rtld_global *__nptl_rtld_global __attribute_used__
|
||||
= &_rtld_global;
|
||||
struct rtld_global *__nptl_rtld_global = &_rtld_global;
|
||||
#endif
|
||||
|
||||
/* Version of the library, used in libthread_db to detect mismatches. */
|
||||
static const char nptl_version[] __attribute_used__ = VERSION;
|
||||
const char __nptl_version[] = VERSION;
|
||||
|
||||
/* This performs the initialization necessary when going from
|
||||
single-threaded to multi-threaded mode for the first time. */
|
||||
|
@ -55,7 +55,7 @@ include ../Rules
|
||||
|
||||
$(objpfx)db-symbols.out: $(objpfx)db-symbols.v.i \
|
||||
$(common-objpfx)libc.so
|
||||
LC_ALL=C $(READELF) -W -s $(filter %.so,$^) | $(AWK) -f $< > $@; \
|
||||
LC_ALL=C $(READELF) -W -D -s $(filter %.so,$^) | $(AWK) -f $< > $@; \
|
||||
$(evaluate-test)
|
||||
|
||||
$(objpfx)db-symbols.v.i: db-symbols.awk
|
||||
|
@ -1,4 +1,4 @@
|
||||
# This script processes the output of 'readelf -W -s' on the libpthread.so
|
||||
# This script processes the output of 'readelf -W -D -s' on the libc.so
|
||||
# we've just built. It checks for all the symbols used in td_symbol_list.
|
||||
|
||||
BEGIN {
|
||||
@ -12,7 +12,7 @@ BEGIN {
|
||||
in_symtab = 0;
|
||||
}
|
||||
|
||||
/Symbol table '.symtab'/ { in_symtab=1; next }
|
||||
/Symbol table for image/ { in_symtab=1; next }
|
||||
NF == 0 { in_symtab=0; next }
|
||||
|
||||
!in_symtab { next }
|
||||
@ -23,6 +23,7 @@ END {
|
||||
status = 0;
|
||||
|
||||
for (s in required) {
|
||||
s = s "@@GLIBC_PRIVATE"
|
||||
if (s in seen) print s, "ok";
|
||||
else {
|
||||
status = 1;
|
||||
@ -32,6 +33,7 @@ END {
|
||||
|
||||
any = "";
|
||||
for (s in th_unique) {
|
||||
s = s "@@GLIBC_PRIVATE"
|
||||
if (s in seen) {
|
||||
any = s;
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user