This is the mail archive of the libc-alpha@cygnus.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Bug in 64-bit printf on PPC


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]