Thread overview
[Issue 23608] [musl 32-bit] Time functions linked incorrectly on musl >=1.2.0 / 32-bit
Jan 08, 2023
Dlang Bot
Feb 19, 2023
Dlang Bot
Feb 20, 2023
Dlang Bot
Feb 22, 2023
Dlang Bot
January 08, 2023
https://issues.dlang.org/show_bug.cgi?id=23608

Dlang Bot <dlang-bot@dlang.rocks> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |pull

--- Comment #1 from Dlang Bot <dlang-bot@dlang.rocks> ---
@CyberShadow updated dlang/dmd pull request #14794 "Fix linking to 64-bit time_t versions of functions on musl" fixing this issue:

- Fix linking to 64-bit time_t versions of functions on musl

  musl switched to 64-bit time_t across all architectures in version
  1.2.0:

  https://musl.libc.org/time64.html

  This change was done in a way which attempted to preserve ABI
  compatibility. To achieve this, the 32-bit versions of functions were
  left at their original names in the compiled library, and new 64-bit
  versions of functions were introduced. The header files then
  redirected calls to the standard function names to use the new 64-bit
  versions using the __asm__("name") construct, which is similar to D's
  pragma(mangle, "name").

  This change is a fix-up for commit
  ca0b670b87284afa341f1bef57f5614d88aecb4b, which tried addressing this
  change in musl by changing time_t to 64-bit when targeting new musl
  versions (the default). However, that change was incomplete, as it did
  not implement the function redirection part of the change, which is
  required to actually call the implementations using 64-bit time_t. As
  a result, it caused programs to link but return incorrect results at
  runtime on 32-bit architectures when targeting new musl versions.

  Fix this by adjusting the mangled name of the D declarations of
  affected functions when targeting musl on 32-bit platforms.  Affected
  functions in musl can be found by grepping for _REDIR_TIME64 and uses
  of the __REDIR macro.

  Fixes issue 23608.

https://github.com/dlang/dmd/pull/14794

--
February 19, 2023
https://issues.dlang.org/show_bug.cgi?id=23608

--- Comment #2 from Dlang Bot <dlang-bot@dlang.rocks> ---
@CyberShadow created dlang/dmd pull request #14895 "Fix linking to 64-bit time_t versions of functions on musl" fixing this issue:

- Fix linking to 64-bit time_t versions of functions on musl

  musl switched to 64-bit time_t across all architectures in version
  1.2.0:

  https://musl.libc.org/time64.html

  This change was done in a way which attempted to preserve ABI
  compatibility. To achieve this, the 32-bit versions of functions were
  left at their original names in the compiled library, and new 64-bit
  versions of functions were introduced. The header files then
  redirected calls to the standard function names to use the new 64-bit
  versions using the __asm__("name") construct, which is similar to D's
  pragma(mangle, "name").

  This change is a fix-up for commit
  ca0b670b87284afa341f1bef57f5614d88aecb4b, which tried addressing this
  change in musl by changing time_t to 64-bit when targeting new musl
  versions (the default). However, that change was incomplete, as it did
  not implement the function redirection part of the change, which is
  required to actually call the implementations using 64-bit time_t. As
  a result, it caused programs to link but return incorrect results at
  runtime on 32-bit architectures when targeting new musl versions.

  Fix this by adjusting the mangled name of the D declarations of
  affected functions when targeting musl on 32-bit platforms.  Affected
  functions in musl can be found by grepping for _REDIR_TIME64 and uses
  of the __REDIR macro.

  Fixes issue 23608.

https://github.com/dlang/dmd/pull/14895

--
February 20, 2023
https://issues.dlang.org/show_bug.cgi?id=23608

Dlang Bot <dlang-bot@dlang.rocks> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--- Comment #3 from Dlang Bot <dlang-bot@dlang.rocks> ---
dlang/dmd pull request #14895 "Fix linking to 64-bit time_t versions of functions on musl" was merged into stable:

- c13f8b554688538f5d36bf6a295f87aedfeb93ed by Vladimir Panteleev:
  Fix linking to 64-bit time_t versions of functions on musl

  musl switched to 64-bit time_t across all architectures in version
  1.2.0:

  https://musl.libc.org/time64.html

  This change was done in a way which attempted to preserve ABI
  compatibility. To achieve this, the 32-bit versions of functions were
  left at their original names in the compiled library, and new 64-bit
  versions of functions were introduced. The header files then
  redirected calls to the standard function names to use the new 64-bit
  versions using the __asm__("name") construct, which is similar to D's
  pragma(mangle, "name").

  This change is a fix-up for commit
  ca0b670b87284afa341f1bef57f5614d88aecb4b, which tried addressing this
  change in musl by changing time_t to 64-bit when targeting new musl
  versions (the default). However, that change was incomplete, as it did
  not implement the function redirection part of the change, which is
  required to actually call the implementations using 64-bit time_t. As
  a result, it caused programs to link but return incorrect results at
  runtime on 32-bit architectures when targeting new musl versions.

  Fix this by adjusting the mangled name of the D declarations of
  affected functions when targeting musl on 32-bit platforms.  Affected
  functions in musl can be found by grepping for _REDIR_TIME64 and uses
  of the __REDIR macro.

  Fixes issue 23608.

https://github.com/dlang/dmd/pull/14895

--
February 22, 2023
https://issues.dlang.org/show_bug.cgi?id=23608

--- Comment #4 from Dlang Bot <dlang-bot@dlang.rocks> ---
dlang/dmd pull request #14904 "merge stable" was merged into master:

- bacf62c25a9587650044acf65e0cf40557b25521 by Vladimir Panteleev:
  Fix linking to 64-bit time_t versions of functions on musl (#14895)

  musl switched to 64-bit time_t across all architectures in version
  1.2.0:

  https://musl.libc.org/time64.html

  This change was done in a way which attempted to preserve ABI
  compatibility. To achieve this, the 32-bit versions of functions were
  left at their original names in the compiled library, and new 64-bit
  versions of functions were introduced. The header files then
  redirected calls to the standard function names to use the new 64-bit
  versions using the __asm__("name") construct, which is similar to D's
  pragma(mangle, "name").

  This change is a fix-up for commit
  ca0b670b87284afa341f1bef57f5614d88aecb4b, which tried addressing this
  change in musl by changing time_t to 64-bit when targeting new musl
  versions (the default). However, that change was incomplete, as it did
  not implement the function redirection part of the change, which is
  required to actually call the implementations using 64-bit time_t. As
  a result, it caused programs to link but return incorrect results at
  runtime on 32-bit architectures when targeting new musl versions.

  Fix this by adjusting the mangled name of the D declarations of
  affected functions when targeting musl on 32-bit platforms.  Affected
  functions in musl can be found by grepping for _REDIR_TIME64 and uses
  of the __REDIR macro.

  Fixes issue 23608.

https://github.com/dlang/dmd/pull/14904

--