https://bugs.kde.org/show_bug.cgi?id=471634
Bug ID: 471634
Summary: strtod() gives inaccurate values on Alpine Linux
(musl-libc) under valgrind
Classification: Developer tools
Product: valgrind
Version: 3.21.0
Platform: Other
OS: Linux
Status: REPORTED
Severity: normal
Priority: NOR
Component: general
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ---
Created attachment 159980
--> https://bugs.kde.org/attachment.cgi?id=159980&action=edit
Test File
SUMMARY
When running under valgrind on Alpine Linux, strtod() gives inaccurate values.
Test was performed on x86_64 architecture. (The same test on Ubuntu valgrind
v3.19 yielded the correct values.)
Each test prints out the original value passed in followed by a comma and then
the result of converting the value to a string (using sprintf(..., "%.17g",
...)) and parsing it using strtod(). Examining the bits of the resulting values
indicates that the last 10-11 bits of the mantissa are zero'd out compared to
the expected values. My best guess is that this has something to do with how
valgrind's dynamic recompiler and musl's implementation of strtod().
STEPS TO REPRODUCE
1. Compile Test File: `g++ -Wall -o ValgrindStrtodTest ValgrindStrtodTest.cxx`
2. Run without valgrind to observe correct results: `./ValgrindStrtodTest`
3. Run with valgrind to observe incorrect results: `valgrind
./ValgrindStrtodTest`
OBSERVED RESULT
~ $ g++ -Wall -o ValgrindTest cal-ro/ValgrindTest.cxx
~ $ ./ValgrindTest
71596396.900554374, 71596396.900554374: GOOD
37033884.342276432, 37033884.342276432: GOOD
71596396.900543213, 71596396.900543213: GOOD
37033884.342269897, 37033884.342269897: GOOD
7.2506449597179708e+307, 7.2506449597179708e+307: GOOD
1.7428478780436407e+308, 1.7428478780436407e+308: GOOD
~ $ valgrind ./ValgrindTest
==108== Memcheck, a memory error detector
==108== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==108== Using Valgrind-3.21.0 and LibVEX; rerun with -h for copyright info
==108== Command: ./ValgrindTest
==108==
71596396.900554373, 71596396.900543212: BAD
37033884.342276431, 37033884.342269897: BAD
71596396.900543212, 71596396.900543212: GOOD
37033884.342269897, 37033884.342269897: GOOD
7.2506449597179707e+307, 7.2506449597178859e+307: BAD
1.7428478780436407e+308, 1.7428478780438379e+308: BAD
==108==
==108== HEAP SUMMARY:
==108== in use at exit: 0 bytes in 0 blocks
==108== total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==108==
==108== All heap blocks were freed -- no leaks are possible
==108==
==108== For lists of detected and suppressed errors, rerun with: -s
==108== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
~ $ uname -a
Linux cf8449d6eb32 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49
UTC 2021 x86_64 Linux
~ $ cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.18.2
PRETTY_NAME="Alpine Linux v3.18"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
EXPECTED RESULT
The output when running with valgrind should match the output when running
without valgrind:
71596396.900554374, 71596396.900554374: GOOD
37033884.342276432, 37033884.342276432: GOOD
71596396.900543213, 71596396.900543213: GOOD
37033884.342269897, 37033884.342269897: GOOD
7.2506449597179708e+307, 7.2506449597179708e+307: GOOD
1.7428478780436407e+308, 1.7428478780436407e+308: GOOD
SOFTWARE/OS VERSIONS
Linux: Alpine 3.18 image running on WSL
ADDITIONAL INFORMATION
Also performed the same test on WSL Ubuntu image. The expected results were
observed.
--
You are receiving this mail because:
You are watching all bug changes.