[uClibc] printf() (and others?) hang

Mark S. Mathews mark at linux-wlan.com
Mon Jun 20 19:34:57 UTC 2005


One more data point (I'm getting a little better at this...):  it's the 
call to va_copy() that's hanging.

This is interesting since my test program worked just fine.

-M


On Mon, 20 Jun 2005, Mark S. Mathews wrote:

>
> One additional data point: we're hanging in _ppfs_prepargs() .
>
> -M
>
> On Fri, 17 Jun 2005, Mark S. Mathews wrote:
>
>> Hi Folks,
>> 
>> I've got a freescale mpc8541 target that's giving me fits.  Basically any 
>> calls to *printf() hang (process appears to be lost in an infinite loop).
>> 
>> I'm building the toolchain using buildroot (pulled from uclibc.org on 
>> 2005-02-11).
>> 
>> Here's a description string of the toolchain:
>> gcc-3.4.3-uClibc-0.9.27-binutils-2.15.91.0.2-linux-2.4.27-powerpc
>> 
>> I've used this same toolchain successfully on x86, xscale, AMCC 405EP, and 
>> MPC850 targets.  The 405 and 850 targets use the same toolchain binaries as 
>> the one I'm trying to use here.
>> 
>> I've been through a lot of testing identifying what the problem is not:
>> 
>> - kernel:
>>    nope, a rootfs built using a gnu libc based toolchain works just fine
>> - blockdev or filesystem:
>>    nope, mtdblock+squashfs and nfsroot exhibit the same behavior
>> - syscall or I/O problems (bad /dev files etc.)
>>    nope, open()/write()/close() and fwrite(stdout|stderr) all work
>> - and the ever popular va_args...
>>    nope, the following program listed at the end of this mail works just
>>    fine all the way up to the printf(), staticly or dynamically linked.
>>    (I suppose the program could give a little more coverage of different
>>    types etc, this is how far I've gotten up to now)
>> - newer uclibc:
>>    nope, rebuilt the toolchain using todays snapshot, same behavior.
>> 
>> I have a couple of questions:
>>  - Has anyone seen anything like this before?
>>  - Are there any pointers for doing uClibc development, debugging,
>>    testing without having to do a full toolchain rebuild every time I
>>    change something?  I'd like to add a little instrumentation to
>>    vfprintf to figure out where we're getting stuck, but it's getting a
>>    little time consuming.  ;-)
>> 
>> Thanks for listening,
>> -Mark
>> 
>> ------------------------------------------------------------
>> 
>> // va_arg test program
>> 
>> #include <stdio.h>
>> #include <sys/types.h>
>> #include <sys/stat.h>
>> #include <fcntl.h>
>> #include <stdarg.h>
>> 
>> int f(int a, ...)
>> {
>> 	va_list ap;
>> 	va_list ap1;
>> 	int b;
>> 	int i;
>> 	char out[3];
>>
>> 	va_start(ap, a);
>> 	va_copy(ap1, ap);
>> 	for (i=0 ; i < a ; i++) {
>> 		b=va_arg(ap1, int);
>> 		out[0]='0'+b;
>> 		out[1]='\n';
>> 		out[2]='\0';
>> 		fwrite(out,strlen(out), 1, stdout);
>> 	}
>> 	va_end(ap1);
>> 	va_end(ap);
>> 	return 0;
>> }
>> 
>> main()
>> {
>> 	int ttyS1;
>> 	char avsstr1[]="(write)Running hello!\n";
>> 	char avsstr2[]="(fwrite)Running hello!\n";
>> 	char avsstr3[]="(fwrite,stderr)Running hello!\n";
>> 	ttyS1=open("/dev/ttyS1", O_RDWR);
>> 	write(ttyS1,avsstr1, strlen(avsstr1));
>> 	close(ttyS1);
>> 	f(1,1);
>> 	f(2,1,2);
>> 	f(3,1,2,3);
>> 	f(4,1,2,3,4);
>> 	f(5,1,2,3,4,5);
>> 	f(6,1,2,3,4,5,6);
>> 	f(7,1,2,3,4,5,6,7);
>> 	f(8,1,2,3,4,5,6,7,8);
>> 	f(9,1,2,3,4,5,6,7,8,9);
>> 	f(10,1,2,3,4,5,6,7,8,9,10);
>> 	fwrite(avsstr2, strlen(avsstr2), 1, stdout);
>> 	fwrite(avsstr3, strlen(avsstr3), 1, stderr);
>> 	printf("(stdout)Running hello!%d\n", 1);
>> }
>> 
>> 
>> 
>> 
>
>

-- 

Mark S. Mathews

AbsoluteValue Systems      Web:    http://www.linux-wlan.com
721-D North Drive          e-mail: mark at linux-wlan.com
Melbourne, FL 32934        Phone:  321.259.0737
USA                        Fax:    321.259.0286



More information about the uClibc mailing list