Page MenuHomeFreeBSD

Fix printf(3) output of long doubles on RISC-V
ClosedPublic

Authored by mhorne on Jun 23 2020, 8:33 PM.
Tags
None
Referenced Files
Unknown Object (File)
Feb 3 2024, 5:42 PM
Unknown Object (File)
Jan 14 2024, 5:39 AM
Unknown Object (File)
Dec 19 2023, 4:59 AM
Unknown Object (File)
Dec 15 2023, 10:28 PM
Unknown Object (File)
Nov 18 2023, 12:46 PM
Unknown Object (File)
Nov 17 2023, 9:04 PM
Unknown Object (File)
Oct 31 2023, 9:29 AM
Unknown Object (File)
Aug 6 2023, 8:25 AM
Subscribers

Details

Summary

When the RISC-V port was initially committed to FreeBSD, GCC would
generate 64-bit long doubles, and the definitions in _fpmath.h reflected
that. This was changed to 128-bit in GCC later that year [1], but the
definitions were never updated. This causes printf(3) and friends to
interpret only the low 64-bits of a long double in ldtoa, thereby
printing incorrect values.

Update the definitions now that both clang and GCC generate 128-bit long
doubles.

PR: 242067

[1] https://github.com/riscv/riscv-gcc/commit/54b21fc5ae83cefec44bc2caed4a8c664c274ba0

Test Plan

Verify that the test program from the PR gives the expected output for libc built with clang and gcc.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

mhorne created this revision.
This revision was not accepted when it landed; it landed in state Needs Review.Jun 29 2020, 7:30 PM
This revision was automatically updated to reflect the committed changes.