Summary: | glibc-core: неполные зависимости -- нерабочий pthread_cancel | ||||||
---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Alexey Sheplyakov <asheplyakov> | ||||
Component: | glibc-core | Assignee: | Gleb F-Malinovskiy <glebfm> | ||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||
Severity: | normal | ||||||
Priority: | P5 | CC: | asheplyakov, glebfm, iv, ldv, placeholder, sin | ||||
Version: | unstable | ||||||
Hardware: | all | ||||||
OS: | Linux | ||||||
Attachments: |
|
Для воспроизведения проблемы в Сизифе сейчас достаточно пересобрать libdb4.7. hsh libdb4.7-4.7.25-alt12.src.rpm hsh pthread_cancel_sample-0.0.1-alt1.src.rpm hsh --init --pkg-build-list 'pthread_cancel_sample' В полученное окружение libgcc1 не попадает. $ hsh-shell [...] -bash-4.4$ pthread_cancel_sample libgcc_s.so.1 must be installed for pthread_cancel to work Aborted -bash-4.4$ #326131 TESTED #1 [test-only] sisyphus glibc.git=2.37.0.22.3593050c27-alt2 glibc-6:2.38.0.6.g7ac405a74c-alt1 -> sisyphus: Sat Aug 19 2023 Gleb F-Malinovskiy <glebfm@altlinux> 6:2.38.0.6.g7ac405a74c-alt1 - Updated to glibc-2.38-6-g7ac405a74c. - Moved the libgcc_s requirement to the core subpackage (ALT#47078). - Added the --enable-fortify-source=3 flag to compile the libraries and utilities with the -D_FORTIFY_SOURCE=3 flag. Я ещё добавил Requires(pre): glibc-core в libgcc1, чтобы rpm не разрывал этот цикл в случайном месте и устанавливал сначала glibc-core, а потом libgcc1: https://git.altlinux.org/gears/g/gcc13.git?p=gcc13.git;a=commitdiff;h=9017c454898e169555bc89950c45007a74deb509 |
Created attachment 13951 [details] Тестовый пакет pthread_cancel_sample Начиная с glibc 2.36 pthread функции находятся в libc.so.6 (а libpthread.so - пустышка для совместимости, она только от libc.so.6 зависит). Для работы pthread_cancel требуется libgcc_s. Такой зависимости у glibc-core нет. Многопоточное приложение, которое пересобрано с новой glibc, зависит только от libc.so.6 (чтобы убедиться в этом, можно собрать приложенный src.rpm -- это тестовая программа из man pthread_cancel). Приложения, использующие pthread_cancel, _пока что_ работают по счастливой случайности - пакеты, которые пока не пересобраны с новой glibc, зависят от (пустышки) libpthread.so.0 из пакета glibc-pthread. А у пакета glibc-pthread есть зависимость от libgcc_s. Нужно добавить к libc-core зависимость от libgcc_s.