LINUX.ORG.RU

В свежее ядро 4.14.13 не приняли патч, который устраняет проблемы сборки в tools/lib/subcmd/pager.c

 


0

1

Сабж. Время идёт, а патч в ветку 4.14.x так и не принимают.

Проблема в 2-х словах:

pager.c:36:12: error: passing argument 2 to restrict-qualified
               parameter aliases with argument 4 [-Werror=restrict]
  select(1, &in, NULL, &in, NULL);
            ^~~        ~~~

Патч для устранения этой проблемы написал Sergey Senozhatsky (Seoul, Korea; Samsung Electronics Co., Ltd.) ещё 1-го января: https://patchwork.kernel.org/patch/10138399/ .

★★★★★

А ядро по умолчанию с -Werror=restrict собирается? Так то никакой ошибки в коде нет: содержимое in после select() не важно и нигде не используется.

Да, варнинг так или иначе надо убрать, но делать это в LTS, да ещё и в коде, который не относится непосредственно к ядру - явно не приоритетная задача.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Патч для устранения этой проблемы написал Sergey Senozhatsky (Seoul, Korea; Samsung Electronics Co., Ltd.) ещё 1-го января

Ибо нехер патчи с похмелья слать.

anonymous
()
Ответ на: комментарий от Deleted

А ядро по умолчанию с -Werror=restrict собирается?

Явно эта опция в исходниках ядра не прописана. Вероятно, юзеры GCC до 8-й версии ничего и не заметили. А для GCC 8 это уже серьёзная ошибка.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

А попробуй ради интереса собрать вручную тот же код:

#include <stdio.h>

#include <sys/select.h>

int main() {
        fd_set in;

        FD_ZERO(&in);
        FD_SET(0, &in);

        select(1, &in, NULL, &in, NULL);

        return 0;
}

Deleted
()
Ответ на: комментарий от Deleted

Без ошибок. Заглянул в tools/lib/subcmd/Makefile и присмотрелся к содержимому. Там есть это:

CFLAGS += -ggdb3 -Wall -Wextra -std=gnu99 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fPIC
При этом, опции "-Wall" уже достаточно для предупреждения на этом коде. Но, бинарник собирается.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

думаю, что и без 8-й версии это ошибка. это же указатель и нельзя гарантировать, как там параметры обрабатываются внутри.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

Это говнокод, но, ИМХО, чтобы он привёл к неправильной работе, надо постараться на стороне реализации select() и наложить говнокода ещё и там.

Deleted
()
Ответ на: комментарий от Deleted

ну, по идее если в функции принимаются два разных указателя, то это два именно разных указателя. иначе на фейхоа? именно об этом и предупреждает компилятор. при оптимизации и распараллеливании выполнения при обращении к таким алиасам может возникнуть банальное UB.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от Deleted

LTS

А какого я вообще решил, что это - LTS-ядро? Оно же текущее стабильное... блин =/

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.