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



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


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