diff --git a/glibc-libthread_db-dynsym-1.patch b/glibc-libthread_db-dynsym-1.patch new file mode 100644 index 0000000..b40f026 --- /dev/null +++ b/glibc-libthread_db-dynsym-1.patch @@ -0,0 +1,62 @@ +Upstream submission: + + + +Author: Florian Weimer +Date: Mon Jun 28 10:05:44 2021 +0200 + + nptl_db: Clean up main/rtld variable handling + + Most symbols are now in libc.so.6. The "main" (exempted from + coverage checks) status is therefore not necessary. Use + DB_MAIN_VARIABLE for the remaining separate symbol, + __nptl_initial_report_events. DB_RTLD_VARIABLE is now unused, so + remove it. + +diff --git a/nptl_db/db-symbols.awk b/nptl_db/db-symbols.awk +index 6f326cf379fc886b..ef1d91b167998d3d 100644 +--- a/nptl_db/db-symbols.awk ++++ b/nptl_db/db-symbols.awk +@@ -2,7 +2,6 @@ + # we've just built. It checks for all the symbols used in td_symbol_list. + + BEGIN { +-%define DB_RTLD_VARIABLE(name) /* Nothing. */ + %define DB_MAIN_VARIABLE(name) /* Nothing. */ + %define DB_MAIN_SYMBOL(name) /* Nothing. */ + %define DB_MAIN_ARRAY_VARIABLE(name) /* Nothing. */ +diff --git a/nptl_db/structs.def b/nptl_db/structs.def +index 6a726f207eca49a3..fb7bb9367d7c01ec 100644 +--- a/nptl_db/structs.def ++++ b/nptl_db/structs.def +@@ -22,10 +22,6 @@ + # define STRUCTS_DEF_DEFAULTS 1 + #endif + +-#ifndef DB_RTLD_VARIABLE +-# define DB_RTLD_VARIABLE(name) DB_VARIABLE (name) +-#endif +- + /* DB_MAIN_VARIABLE, DB_MAIN_SYMBOL, DB_MAIN_ARRAY_VARIABLE are not + covered by the libc symbol check in db-symbols.awk. */ + #ifndef DB_MAIN_VARIABLE +@@ -78,14 +74,14 @@ DB_STRUCT_FIELD (td_eventbuf_t, eventnum) + DB_STRUCT_FIELD (td_eventbuf_t, eventdata) + + DB_SYMBOL (nptl_version) +-DB_MAIN_SYMBOL (__nptl_create_event) +-DB_MAIN_SYMBOL (__nptl_death_event) ++DB_SYMBOL (__nptl_create_event) ++DB_SYMBOL (__nptl_death_event) + DB_SYMBOL (__nptl_threads_events) +-DB_MAIN_VARIABLE (__nptl_nthreads) ++DB_VARIABLE (__nptl_nthreads) + DB_VARIABLE (__nptl_last_event) +-DB_RTLD_VARIABLE (__nptl_initial_report_events) ++DB_MAIN_VARIABLE (__nptl_initial_report_events) + +-DB_MAIN_ARRAY_VARIABLE (__pthread_keys) ++DB_ARRAY_VARIABLE (__pthread_keys) + DB_STRUCT (pthread_key_struct) + DB_STRUCT_FIELD (pthread_key_struct, seq) + DB_STRUCT_FIELD (pthread_key_struct, destr) diff --git a/glibc-libthread_db-dynsym-2.patch b/glibc-libthread_db-dynsym-2.patch new file mode 100644 index 0000000..0ecd4ba --- /dev/null +++ b/glibc-libthread_db-dynsym-2.patch @@ -0,0 +1,37 @@ +Upstream submission: + + + +Author: Florian Weimer +Date: Mon Jun 28 10:25:21 2021 +0200 + + nptl: Rename nptl_version to __nptl_version + + This prepares it for exporting as a dynamic symbol. + +diff --git a/nptl_db/structs.def b/nptl_db/structs.def +index fb7bb9367d7c01ec..248ecf43358dd7ae 100644 +--- a/nptl_db/structs.def ++++ b/nptl_db/structs.def +@@ -73,7 +73,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_SYMBOL (__nptl_create_event) + DB_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 501d922ea269f703..eeca29d5a0f7be9f 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; diff --git a/glibc-libthread_db-dynsym.patch b/glibc-libthread_db-dynsym-3.patch similarity index 75% rename from glibc-libthread_db-dynsym.patch rename to glibc-libthread_db-dynsym-3.patch index 0fdc8c4..1ce2ced 100644 --- a/glibc-libthread_db-dynsym.patch +++ b/glibc-libthread_db-dynsym-3.patch @@ -1,16 +1,21 @@ +Upstream submission: + + + Author: Florian Weimer -Date: Thu Jun 17 19:23:00 2021 +0200 +Date: Mon Jun 28 10:24:33 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. + The commit also enhances the checks in nptl/db-symbols.awk to cover + both the _thread_db_* descriptor symbols and the actual symbols + themselves. diff --git a/nptl/Versions b/nptl/Versions -index 62bb939d54..c03ed92848 100644 +index e4fae73c0b9fae0c..060d8d5dec2be29c 100644 --- a/nptl/Versions +++ b/nptl/Versions @@ -403,10 +403,14 @@ libc { @@ -28,12 +33,14 @@ index 62bb939d54..c03ed92848 100644 __pthread_attr_copy; __pthread_attr_destroy; __pthread_attr_init; -@@ -430,6 +434,58 @@ libc { +@@ -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; @@ -88,7 +95,7 @@ index 62bb939d54..c03ed92848 100644 } diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c -index 3f017f1e26..d1b6817a81 100644 +index 3f017f1e26c0d107..d1b6817a81b21ef1 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -43,21 +43,24 @@ @@ -122,10 +129,10 @@ index 3f017f1e26..d1b6817a81 100644 /* 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 +index 1f79c018a1f9fe19..c04aa6140acff337 100644 --- a/nptl_db/Makefile +++ b/nptl_db/Makefile -@@ -57,7 +57,7 @@ include ../Rules +@@ -55,7 +55,7 @@ include ../Rules $(objpfx)db-symbols.out: $(objpfx)db-symbols.v.i \ $(common-objpfx)libc.so @@ -135,10 +142,32 @@ index ea721c1dcf..4cc51c0e7b 100644 $(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 +index ef1d91b167998d3d..a9289b4686a02dd2 100644 --- a/nptl_db/db-symbols.awk +++ b/nptl_db/db-symbols.awk -@@ -13,7 +13,7 @@ BEGIN { +@@ -1,7 +1,8 @@ +-# 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 { ++# This processes the _thread_db_* names. + %define DB_MAIN_VARIABLE(name) /* Nothing. */ + %define DB_MAIN_SYMBOL(name) /* Nothing. */ + %define DB_MAIN_ARRAY_VARIABLE(name) /* Nothing. */ +@@ -9,10 +10,19 @@ BEGIN { + %define DB_LOOKUP_NAME_TH_UNIQUE(idx, name) th_unique[STRINGIFY (name)] = 1; + %include "db-symbols.h" + ++# And this processes the symbol names themselves. ++%define DB_STRUCT(...) /* Nothing. */ ++%define DB_STRUCT_FIELD(...) /* Nothing. */ ++%define DB_STRUCT_FLEXIBLE_ARRAY(...) /* Nothing. */ ++%define DB_SYMBOL(name) required[STRINGIFY (name)] = 1; ++%define DB_FUNCTION(name) required[STRINGIFY (name)] = 1; ++%define DB_VARIABLE(name) required[STRINGIFY (name)] = 1; ++%include "structs.def" ++ in_symtab = 0; } @@ -147,7 +176,7 @@ index 6f326cf379..2033f95e38 100644 NF == 0 { in_symtab=0; next } !in_symtab { next } -@@ -24,6 +24,7 @@ END { +@@ -23,6 +33,7 @@ END { status = 0; for (s in required) { @@ -155,7 +184,7 @@ index 6f326cf379..2033f95e38 100644 if (s in seen) print s, "ok"; else { status = 1; -@@ -33,6 +34,7 @@ END { +@@ -32,6 +43,7 @@ END { any = ""; for (s in th_unique) { @@ -163,29 +192,3 @@ index 6f326cf379..2033f95e38 100644 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; diff --git a/glibc.spec b/glibc.spec index 3b97f3f..d313141 100644 --- a/glibc.spec +++ b/glibc.spec @@ -111,7 +111,7 @@ Summary: The GNU libc libraries Name: glibc Version: %{glibcversion} -Release: 31%{?dist} +Release: 32%{?dist} # In general, GPLv2+ is used by programs, LGPLv2+ is used for # libraries. @@ -194,8 +194,10 @@ Patch34: glibc-nosymlink-1.patch Patch35: glibc-nosymlink-2.patch Patch36: glibc-nosymlink-3.patch Patch37: glibc-nosymlink-4.patch -Patch38: glibc-libthread_db-dynsym.patch Patch39: glibc-iconvconfig-corruption.patch +Patch40: glibc-libthread_db-dynsym-1.patch +Patch41: glibc-libthread_db-dynsym-2.patch +Patch42: glibc-libthread_db-dynsym-3.patch ############################################################################## # Continued list of core "glibc" package information: @@ -2213,6 +2215,9 @@ fi %files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared %changelog +* Mon Jun 28 2021 Florian Weimer - 2.33.9000-32 +- Switch to new version of libthread_db .dynsym patch + * Mon Jun 28 2021 Florian Weimer - 2.33.9000-31 - Further .symtab adjustment: Keep all __GI_* symbols (#1975859)