Bug in 64-bit printf on PPC
Franz Sirl
Franz.Sirl-kernel@lauterbach.com
Thu Apr 1 00:00:00 GMT 1999
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