Hi, folks
My test environment is GCC (4.7.1), GDB (7.6) and uclibc (0.9.33.2 commit
ff22cca4).
The testcase is:
$ cat long_long_simple.c
#include <stdio.h>
int main()
{
long long val = 01234567123456701234567LL; /* 21+ octal digits
*/
printf("%.17g\n", val);
return 0;
}
Debug the program with UCLIBC_HAS_OBSTACK *disabled*:
sh-4.2# ./long_long_simple
-5.9822653797615731e-120
sh-4.2# gdb ./long_long_simple
GNU gdb (GDB) 7.6
[...]
(gdb) b 6
Breakpoint 1 at 0x84f0: file long_long_simple.c, line 6.
(gdb) r
Starting program: /tmp/long_long_simple
Breakpoint 1, main () at long_long_simple.c:6
6 long_long_simple.c: No such file or directory.
(gdb) p val
$1 = -6399925985474168457
(gdb) p/o val
$2 = 01234567123456701234567
(gdb) p/f val
$3 = -5.9822653797615723e-120
Debug the program with UCLIBC_HAS_OBSTACK *enabled*:
sh-4.2# ./long_long_simple
-5.9822653797615731e-120
sh-4.2# gdb long_long_simple
GNU gdb (GDB) 7.6
[...]
(gdb) b 6
Breakpoint 1 at 0x84f0: file long_long_simple.c, line 6.
(gdb) r
Starting program: /tmp/long_long_simple
Breakpoint 1, main () at long_long_simple.c:6
6 long_long_simple.c: No such file or directory.
(gdb) p val
$1 = -6399925985474168457
(gdb) p/o val
$2 = 01234567123456701234567
(gdb) p/f val
$3 = -5.9822653797615731e-120
>From the value of `$2', we could see that GDB get the correct value of `val'.
But if we format the value as `p/f', the two values of `$3' are not the same:
$3 = -5.98226537976157*23e*-120 UCLIBC_HAS_OBSTACK disabled, this is the
expected value
$3 = -5.98226537976157*31e*-120 UCLIBC_HAS_OBSTACK enabled, this value is
not correct
I have no idea if the problem has anything to do with
http://lists.uclibc.org/pipermail/uclibc/2015-May/048932.html
Did anyone ever hit this case? Any suggestion is appreciated.
Thanks,
Sheng
_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc