amd64/59650: passing float parameters in non-main threads bus
errors
Adriaan de Groot
adridg at cs.kun.nl
Wed Nov 26 05:30:26 PST 2003
The following reply was made to PR amd64/59650; it has been noted by GNATS.
From: Adriaan de Groot <adridg at cs.kun.nl>
To: freebsd-gnats-submit at FreeBSD.org
Cc:
Subject: Re: amd64/59650: passing float parameters in non-main threads bus errors
Date: Wed, 26 Nov 2003 14:23:10 +0100
Some further debugging shows that it's not even sprintf() of va_start()
specific, but just passing float / double arguments to a varargs function in
a non-main thread of control triggers bus errors already:
/*
** Demonstration program that float parameters to
** varargs functions in non-main threads of
** control on amd64 does not work properly.
*/
#include <stdio.h>
#include <pthread.h>
#include <stdarg.h>
/*
** This is a varargs function to which we will attempt to pass
** a float value in the ... .
*/
int PrintF(int fd, const char *fmt, int i, ...)
{
int ret = 2;
fprintf(stderr,"[%lx]B %d\n",(long)pthread_self(),fd);
return ret;
}
/*
** Demonstration function. Expected output is something like
**
** [504000]B 0
** [504000]B 1
** [504000]B 2
** [504000]B 3
**
** From the 4 calls to PrintF(). This bus errors in the third
** call when not in the main thread of control.
*/
void *threadfunc(void *p)
{
PrintF(0,"hello",0,0);
PrintF(1,"hello",0,6);
PrintF(2,"hello",1,0.00028376223); /* arg4 is a float */
PrintF(3,"hello",0.00028376223,6); /* arg3 converts to int here */
return p;
}
int main(int argc, char **argv)
{
pthread_t tid;
threadfunc(NULL);
pthread_create(&tid,NULL,threadfunc,NULL);
sleep(4);
threadfunc(NULL);
return 0;
}
Now, either I'm doing something totally moronic with threads (and the ogg123
port is too) or the argument passing is seriously broken. I might be
compiling it wrong, though:
beans.ebn.kun.nl$gcc -o threadtest -g v.c -lc_r && ./threadtest
[504000]B 0
[504000]B 1
[504000]B 2
[504000]B 3
[504800]B 0
[504800]B 1
Bus error (core dumped)
The machine has been updated in -CURRENT since the original bug report:
FreeBSD beans.ebn.kun.nl 5.2-BETA FreeBSD 5.2-BETA #2: Sun Nov 23 19:48:43 CET
2003 root at beans.ebn.kun.nl:/usr/obj/mnt/sys/CURRENT/src/sys/BEANS amd64
--
pub 1024D/FEA2A3FE 2002-06-18 Adriaan de Groot <groot at kde.org>
If the door is ajar, can we fill it with door-jamb?
More information about the freebsd-amd64
mailing list