https://sourceware.org/bugzilla/show_bug.cgi?id=24944
Bug ID: 24944 Summary: gas doesn't read all necessary ditits when parse a floating point number Product: binutils Version: 2.33 (HEAD) Status: UNCONFIRMED Severity: normal Priority: P2 Component: gas Assignee: unassigned at sourceware dot org Reporter: jbgg.gnu at gmail dot com Target Milestone: --- Created attachment 11966 --> https://sourceware.org/bugzilla/attachment.cgi?id=11966&action=edit Patch for this bug The pseudo instruction .double doesn't work fine parsing some numbers. The function atof_generic doesn't read all digits of the number. POC: $ cat << EOF | as -o tmp && objdump -s tmp .data .double 37778931862957165903873.0 EOF Output of previous command is: tmp: file format elf64-x86-64 Contents of section .data: 0000 00000000 0000a044 .......D We note that number N=37778931862957165903873.0 is calculated with bc with command: $echo 'e=75; 2^e + 2^(e-53) + 1' | bc Then the numbers a=2^75 and b=(1+2^-52)*2^75 are the below and above approximation of N to a double floating number. The output of previous command shows that .double instruction chooses 2^75 as double aproximation, although floating number (1+2^-52)*2^75 is closest to N since N=(a+b)/2 + 1. This is due to a variable called ``maximum_useful_digits'' which limits the number of read digits. We can replace the variable ``maximum_useful_digits'' by the variable ``number_of_digits_available''. gas/Changelog: * atof-generic.c: Delete the variable maximum_useful_digits. * testsuite/gas/i386/fp.s: add numbers where this bugs ocurrs. * testsuite/gas/i386/fp.d: correct output. -- You are receiving this mail because: You are on the CC list for the bug. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils