LINUX.ORG.RU

64 bit time на системе 32 bit?

 , , ,


0

2

Собрал систему для ARM (32 bit) с помощью buildroot 2021.2 в качестве toolchain использовался Linaro http://snapshots.linaro.org/components/toolchain/binaries/10.2-2021.01-3/arm-linux-gnueabihf/ в котором заголовочные файлы от ядра 5.10 и glibc 2.32 в которых есть поддержка 64 битного времени. О чем говорится: https://www.gnu.org/software/libc/manual/html_node/64_002dbit-time-symbol-handling.html

Ожидал что при полной рекомпиляции системы с новой библиотекой sizeof(time_t) будет равен 8, но нет, имею только 4.

Используется Busybox и др. так что всё, что связано со временем (после 2038) работает некорректно.

Вопрос, что надо сделать чтоб иметь 64 битное время? Заранее спасибо.

У вас команда

echo "#include <time.h>" | gcc -E -dM - | grep -E 'TIMESIZE|WORDSIZE'

что показывает? Неужели __TIMESIZE == 64?

Если __TIMESIZE == 32, то по вашей ссылке написано, что для 64-бит времени нужно использовать __time64_t и __clock_gettime64().

Вроде пока не рискуют делать TIMESIZE==64 на 32-бит системах, боятся, что много кода будет работать не корректно.

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

что показывает?

''' #define __WORDSIZE32_PTRDIFF_LONG 0 #define __WORDSIZE32_SIZE_ULONG 0 #define __WORDSIZE 32 #define __TIMESIZE __WORDSIZE #define __WORDSIZE_TIME64_COMPAT32 0 '''

Если __TIMESIZE == 32, то по вашей ссылке написано, что для 64-бит времени нужно использовать __time64_t и __clock_gettime64().

для нового кода можно, но менять в к примеру в busybox типы как-то не хочется :(

делал редефайн при сборке -D__TIMESIZE=64, тоже что-то не получилось.

paspartu ()