Bug in 64-bit printf on PPC
Franz Sirl
Franz.Sirl-kernel@lauterbach.com
Thu Apr 1 00:00:00 GMT 1999
Nevermind, I got access to an x86 machine with egcs-1.03a and built a glibc-2.1
with UDIV_TIME set to 160 for x86. This caused the UDIV_TIME>2*UMUL_TIME
algorithm to be used in _itoa.c and in fact I got the same faulty output for
%llu as I got on PPC.
Probably one more familiar with the algorithms in _itoa.c should look into this.
Franz.
Am Mon, 15 Feb 1999 schrieb Franz Sirl:
>Hi,
>
>thanks for converting my testcase to glibc format.
>
>I the meantime I have debugged it a little and I need a little bit help now.
>Depending on the UDIV_TIME/UMUL_TIME set in stdlib/longlong.h,
>stdio-common/_itoa.c chooses different algorithms on different CPUs. Can someone
>with an x86 try the testcase on a glibc built with a modified
>stdlib/longlong.h, where UDIV_TIME > 2*UMUL_TIME (eg. 160)?
>
>I want to sort out algorithm bugs vs. compiler bugs.
>
>Thanks,
>Franz.
>
>
>Am Sun, 14 Feb 1999 schrieb Andreas Jaeger:
>>>>>>> Franz Sirl writes:
>>Franz> This should probably be added to the testsuite.
>>
>>Ok, I've copied tiformat and added your examples. The appended
>>program tllformat.c should show the same bugs as your program - and
>>can easily be added to glibc.
>>
>>Andreas
>>
>>1999-02-14 Andreas Jaeger <aj@arthur.rhein-neckar.de>
>>
>> * stdio-common/Makefile (tests): tllformat added.
>>
>> * stdio-common/tllformat.c: New program, based on tiformat.c with
>> examples from Franz Sirl <Franz.Sirl-kernel@lauterbach.com>.
>>
>>Program tllformat.c:
>>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>>#include <stdio.h>
>>#include <string.h>
>>
>>/* The original file was tiformat.c and it has been changed for long long tests. */
>>typedef struct {
>> int line;
>> long long value;
>> const char *result;
>> const char *format_string;
>>} sprint_int_type;
>>
>>sprint_int_type sprint_ints[] =
>>{
>> {__LINE__, 0x00000000ULL, "0", "%llx"},
>> {__LINE__, 0xffff00000000208bULL, "ffff00000000208b", "%llx"},
>> {__LINE__, 0xffff00000000208bULL, "18446462598732849291", "%llu"},
>> {__LINE__, 18446462598732849291ULL, "ffff00000000208b", "%llx"},
>> {__LINE__, 18446462598732849291ULL, "18446462598732849291", "%llu"},
>> {__LINE__, 18359476226655002763ULL, "fec9f65b0000208b", "%llx"},
>> {__LINE__, 18359476226655002763ULL, "18359476226655002763", "%llu"},
>>
>> {0},
>>};
>>
>>int
>>main(void)
>>{
>> int errcount = 0;
>> int testcount = 0;
>>#define BSIZE 1024
>> char buffer[BSIZE];
>> sprint_int_type *iptr;
>> for (iptr = sprint_ints; iptr->line; iptr++) {
>> sprintf(buffer, iptr->format_string, iptr->value);
>> if (strcmp(buffer, iptr->result) != 0) {
>> errcount++;
>> printf(
>> "Error in line %d using \"%s\". Result is \"%s\"; should be: \"%s\".\n",
>> iptr->line, iptr->format_string, buffer, iptr->result);
>> }
>> testcount++;
>> }
>>
>> if (errcount == 0) {
>> printf ("Encountered no errors in %d tests.\n", testcount);
>> return 0;
>> }
>> else {
>> printf ("Encountered %d errors in %d tests.\n",
>> errcount, testcount);
>> return 1;
>> }
>>}
>>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>>--- stdio-common/Makefile.~1~ Sun Feb 7 12:29:12 1999
>>+++ stdio-common/Makefile Sun Feb 14 21:53:27 1999
>>@@ -47,7 +47,7 @@
>> temptest tst-fileno test-fwrite tst-ungetc tst-ferror \
>> xbug errnobug \
>> bug1 bug2 bug3 bug4 bug5 bug6 bug7 bug8 bug9 bug10 bug11 bug12 \
>>- tfformat tiformat tstdiomisc tst-printfsz tst-wc-printf \
>>+ tfformat tiformat tllformat tstdiomisc tst-printfsz tst-wc-printf \
>> scanf1 scanf2 scanf3 scanf4 scanf5 scanf7 scanf8 scanf9 scanf10 \
>> scanf12 tst-tmpnam
>>
>>
>>--
>> Andreas Jaeger aj@arthur.rhein-neckar.de jaeger@informatik.uni-kl.de
>> for pgp-key finger ajaeger@aixd1.rhrk.uni-kl.de
More information about the Libc-alpha
mailing list