Summary: | nss: ошибка сборки с GCC 13 | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Alexey Sheplyakov <asheplyakov> | ||||||
Component: | nss | Assignee: | Alexey Gladkov <legion> | ||||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||
Severity: | normal | ||||||||
Priority: | P5 | CC: | asheplyakov, iv, legion, nir, rauty, sin | ||||||
Version: | unstable | ||||||||
Hardware: | all | ||||||||
OS: | Linux | ||||||||
Bug Depends on: | |||||||||
Bug Blocks: | 45802 | ||||||||
Attachments: |
|
Description
Alexey Sheplyakov
2023-06-01 07:47:06 MSK
Created attachment 13353 [details]
патч для исправления ошибки
(Ответ для Alexey Sheplyakov на комментарий #1) > Создано вложение 13353 [details] [подробности] > патч для исправления ошибки Это не исправление ошибки, а игнорирование. Но спасибо за патч. (Ответ для Alexey Gladkov на комментарий #2) > (Ответ для Alexey Sheplyakov на комментарий #1) > > Создано вложение 13353 [details] [подробности] > > патч для исправления ошибки > > Это не исправление ошибки, а игнорирование. Нет. threadData->p2 действительно содержит адрес локальной переменной. Но threadData->p2 читает только поток, входной точкой которого является функция genericThread (для того, чтобы вызвать нужную функцию в данном потоке). А основной поток читает только threadData->count. Но компилятор об этом знать не может (он вообще про потоки не знает), так что ему надо помочь. Можно было переписать код примерно так: 46 void 47 PKCS11Thread(void *data) 48 { 49 ThreadData *threadData = (ThreadData *)data; 50 pk11_op_func op = (pk11_op_func)threadData->op; 51 int iters = threadData->iters; 52 unsigned char sigData[256]; 53 SECItem sig; 54 CK_SESSION_HANDLE session; 55 CK_RV crv; 56 void *p2 = threadData->p2; 57 58 threadData->status = SECSuccess; 59 threadData->count = 0; 60 61 /* get our thread's session */ 62 PR_Lock(threadData->lock); 63 crv = NSC_OpenSession(1, CKF_SERIAL_SESSION, NULL, 0, &session); 64 PR_Unlock(threadData->lock); 65 if (crv != CKR_OK) { 66 return; 67 } 68 69 if (threadData->isSign) { 70 sig.data = sigData; 71 sig.len = sizeof(sigData); 72 p2 = (void *)&sig; 73 } 74 75 while (iters--) { 76 threadData->status = (*op)(session, threadData->p1, 77 p2, threadData->p3); 78 if (threadData->status != SECSuccess) { 79 break; 80 } 81 threadData->count++; 82 } 83 return; 84 } Но не хочется делать это только ради того, чтобы ублажить компилятор. И при беглом взгляде возникает вопрос - а зачем эта возня с p2, почему нельзя просто threadData->p2 использовать? Технически значение thre > Но спасибо за патч. Created attachment 13363 [details]
ещё один вариант исправления
(Ответ для Alexey Sheplyakov на комментарий #4) > Создано вложение 13363 [details] [подробности] > ещё один вариант исправления Собственно взял и переписал, как рассказал в предыдущем комментарии. А кому существование p2 покажется странным наверное сможет посмотреть в git blame. gcc13 в сизифе нет, но я верю, что в nss 3.90.0-alt1 всё исправлено. |