Export libthread_db symbols under GLBIC_PRIVATE (#1965374)
This commit is contained in:
parent
14d5c92a57
commit
52d0948022
|
@ -0,0 +1,191 @@
|
||||||
|
Author: Florian Weimer <fweimer@redhat.com>
|
||||||
|
Date: Thu Jun 17 19:23:00 2021 +0200
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
nptl_version had to be renamed to __nptl_version to avoid
|
||||||
|
namespace issues.
|
||||||
|
|
||||||
|
diff --git a/nptl/Versions b/nptl/Versions
|
||||||
|
index 62bb939d54..c03ed92848 100644
|
||||||
|
--- a/nptl/Versions
|
||||||
|
+++ b/nptl/Versions
|
||||||
|
@@ -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,58 @@ libc {
|
||||||
|
__pthread_unwind;
|
||||||
|
__sched_fifo_max_prio;
|
||||||
|
__sched_fifo_min_prio;
|
||||||
|
+ _thread_db___nptl_last_event;
|
||||||
|
+ _thread_db___nptl_rtld_global;
|
||||||
|
+ _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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
|
||||||
|
index 3f017f1e26..d1b6817a81 100644
|
||||||
|
--- a/nptl/pthread_create.c
|
||||||
|
+++ b/nptl/pthread_create.c
|
||||||
|
@@ -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. */
|
||||||
|
diff --git a/nptl_db/Makefile b/nptl_db/Makefile
|
||||||
|
index ea721c1dcf..4cc51c0e7b 100644
|
||||||
|
--- a/nptl_db/Makefile
|
||||||
|
+++ b/nptl_db/Makefile
|
||||||
|
@@ -57,7 +57,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
|
||||||
|
diff --git a/nptl_db/db-symbols.awk b/nptl_db/db-symbols.awk
|
||||||
|
index 6f326cf379..2033f95e38 100644
|
||||||
|
--- a/nptl_db/db-symbols.awk
|
||||||
|
+++ b/nptl_db/db-symbols.awk
|
||||||
|
@@ -13,7 +13,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 }
|
||||||
|
@@ -24,6 +24,7 @@ END {
|
||||||
|
status = 0;
|
||||||
|
|
||||||
|
for (s in required) {
|
||||||
|
+ s = s "@@GLIBC_PRIVATE"
|
||||||
|
if (s in seen) print s, "ok";
|
||||||
|
else {
|
||||||
|
status = 1;
|
||||||
|
@@ -33,6 +34,7 @@ END {
|
||||||
|
|
||||||
|
any = "";
|
||||||
|
for (s in th_unique) {
|
||||||
|
+ s = s "@@GLIBC_PRIVATE"
|
||||||
|
if (s in seen) {
|
||||||
|
any = s;
|
||||||
|
break;
|
||||||
|
diff --git a/nptl_db/structs.def b/nptl_db/structs.def
|
||||||
|
index 6a726f207e..e2e51acc39 100644
|
||||||
|
--- a/nptl_db/structs.def
|
||||||
|
+++ b/nptl_db/structs.def
|
||||||
|
@@ -77,7 +77,7 @@ DB_STRUCT (td_eventbuf_t)
|
||||||
|
DB_STRUCT_FIELD (td_eventbuf_t, eventnum)
|
||||||
|
DB_STRUCT_FIELD (td_eventbuf_t, eventdata)
|
||||||
|
|
||||||
|
-DB_SYMBOL (nptl_version)
|
||||||
|
+DB_SYMBOL (__nptl_version)
|
||||||
|
DB_MAIN_SYMBOL (__nptl_create_event)
|
||||||
|
DB_MAIN_SYMBOL (__nptl_death_event)
|
||||||
|
DB_SYMBOL (__nptl_threads_events)
|
||||||
|
diff --git a/nptl_db/td_ta_new.c b/nptl_db/td_ta_new.c
|
||||||
|
index 501d922ea2..eeca29d5a0 100644
|
||||||
|
--- a/nptl_db/td_ta_new.c
|
||||||
|
+++ b/nptl_db/td_ta_new.c
|
||||||
|
@@ -39,7 +39,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
|
||||||
|
LOG ("td_ta_new");
|
||||||
|
|
||||||
|
/* Check whether the versions match. */
|
||||||
|
- if (td_lookup (ps, SYM_nptl_version, &versaddr) != PS_OK)
|
||||||
|
+ if (td_lookup (ps, SYM___nptl_version, &versaddr) != PS_OK)
|
||||||
|
return TD_NOLIBTHREAD;
|
||||||
|
if (ps_pdread (ps, versaddr, versbuf, sizeof (versbuf)) != PS_OK)
|
||||||
|
return TD_ERR;
|
|
@ -97,7 +97,7 @@
|
||||||
Summary: The GNU libc libraries
|
Summary: The GNU libc libraries
|
||||||
Name: glibc
|
Name: glibc
|
||||||
Version: %{glibcversion}
|
Version: %{glibcversion}
|
||||||
Release: 21%{?dist}
|
Release: 22%{?dist}
|
||||||
|
|
||||||
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
||||||
# libraries.
|
# libraries.
|
||||||
|
@ -178,6 +178,7 @@ Patch34: glibc-nosymlink-1.patch
|
||||||
Patch35: glibc-nosymlink-2.patch
|
Patch35: glibc-nosymlink-2.patch
|
||||||
Patch36: glibc-nosymlink-3.patch
|
Patch36: glibc-nosymlink-3.patch
|
||||||
Patch37: glibc-nosymlink-4.patch
|
Patch37: glibc-nosymlink-4.patch
|
||||||
|
Patch38: glibc-libthread_db-dynsym.patch
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Continued list of core "glibc" package information:
|
# Continued list of core "glibc" package information:
|
||||||
|
@ -2189,6 +2190,9 @@ fi
|
||||||
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
|
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jun 17 2021 Florian Weimer <fweimer@redhat.com> - 2.33.9000-22
|
||||||
|
- Export libthread_db symbols under GLBIC_PRIVATE (#1965374)
|
||||||
|
|
||||||
* Thu Jun 17 2021 Florian Weimer <fweimer@redhat.com> - 2.33.9000-21
|
* Thu Jun 17 2021 Florian Weimer <fweimer@redhat.com> - 2.33.9000-21
|
||||||
- Redo the crafted libc.so.6 symbol table for valgrind (#1965374)
|
- Redo the crafted libc.so.6 symbol table for valgrind (#1965374)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue