向 64 位 time_t 过渡的危险

主要观点:

  • 32 位 time_t 类型在 2038 年可能导致 32 位应用程序出错,应将其改为 64 位类型。
  • 介绍了 glibc 中的不同 ABI 子类型,如原始 32 位 ABI、带 64 位 off_t 和 ino_t 的 LFS、带 64 位 time_t 的 time64 等。
  • 指出 ABI 更改的严重性,如结构和函数参数的对齐问题可能导致二进制文件读取或写入错误。
  • 讨论了使 ABI 更改更安全的三种想法,包括更改平台元组、更改 libdir 和引入二进制级 ABI 区分。
  • 提到 32 位预构建应用程序的兼容性和 2038 年问题,以及目前的解决方案。
  • 对最初的想法进行了修正,意识到不能依赖硬编码 libdir 路径,需要重新考虑解决方案,如注入 RPATH 或临时更改 libdir 等。

关键信息:

  • 32 位应用程序在 2038 年的问题及解决方案。
  • glibc 中的不同 ABI 子类型及其特点。
  • ABI 更改带来的结构和函数参数对齐问题。
  • 使 ABI 更改更安全的三种想法及实施难度。
  • 32 位预构建应用程序的兼容性问题及解决方案。
  • 对最初想法的修正及新的解决方案。

重要细节:

  • 介绍了 Large File Support 及其与 time64 支持的关系。
  • 详细说明了不同 ABI 子类型下结构体和函数参数的变化及影响。
  • 阐述了更改平台元组、libdir 和引入二进制级 ABI 区分的具体内容和实施难度。
  • 提到了 32 位预构建应用程序在兼容性和 2038 年问题上面临的困难及可能的解决方案。
  • 对最初想法的修正及新方案的优缺点进行了讨论。
阅读 19
0 条评论