В заголовках relibc исправлены раскладки, от которых зависит генерация FFI
11.02.2026В relibc приведены в соответствие со спецификацией несколько типов: исправлена раскладка sched_param, timespec стал экспортироваться с правильным time_t, починен тип размера блока, добавлен предел PTHREAD_STACK_MIN.
Почему раскладка структуры важнее её полей
Структура, описанная в заголовке, должна точно совпадать с той, что ожидает компилятор, генерирующий привязки. Любое расхождение — это не ошибка компиляции, а тихая порча данных: поля читаются не с того места.
Особенно неприятно, когда поля выглядят осмысленно. При неверной раскладке sched_param программа прочитает параметры планирования из правильных на вид мест, но получит значения из соседних полей. Никакой диагностики не будет — ни компилятор, ни отладчик не имеют оснований возразить.
Что исправлено
- раскладка структуры
sched_paramприведена к спецификации — 11 февраля; timespecвынесен в отдельный заголовок и экспортируется с правильнымtime_t— 12 февраля;- починен тип размера блока — 24 февраля;
- добавлен предел
PTHREAD_STACK_MIN— 1 февраля.
Отдельно в этом же месяце на 32-битной цели исправлена ширина int32_t и починены заголовки C++ для 32-битного x86 и RISC-V. Коммиты по ним в выдаче не нашлись, поэтому дата этих двух правок не установлена и в новость не заявлена.
Кого это затрагивает
Генераторы привязок на Rust — bindgen и его потомки — читают заголовки C и строят по ним типы. Ошибка в заголовке становится ошибкой в сгенерированном коде, и дальше она живёт уже без всякой связи с исходной причиной. Поэтому расхождение в заголовке видят не авторы привязки, а пользователи библиотеки, у которых в худшем случае порча данных, а в лучшем — непонятная ошибка компиляции.
Оригинал
Коммиты в репозитории redox-os/relibc: Fix exporting sched_param от 11 февраля 2026 года, extract timespec to a bits header от 12-го, Fix blkcnt_t type от 24-го, define PTHREAD_STACK_MIN от 1-го. Сводка «This Month in Redox — February 2026», раздел «Relibc Improvements»
Упоминаний: 1 · Просмотров: 2