amd64/110656: 32 bit threaded applications crash on amd64 SMP kernel.

Martin M. Mladenov fm at mtweb.org
Thu Mar 22 06:20:05 UTC 2007


>Number:         110656
>Category:       amd64
>Synopsis:       32 bit threaded applications crash on amd64 SMP kernel.
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-amd64
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Mar 22 06:20:04 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator:     Martin M. Mladenov
>Release:        FreeBSD 6.2-RELEASE-p3 amd64
>Organization:
>Environment:
System: FreeBSD c8 6.2-RELEASE-p3 FreeBSD 6.2-RELEASE-p3 #2: Wed Mar 21 06:31:50 MST 2007 root at c8:/usr/obj/usr/src/sys/SM6015TTV amd64
>Description:
   32 bit applications using the posix threads library crash when calling pthread_create on an SMP amd64 kernel. This happens
	 with existing binaries, built natively on a x86 machine, as well as binaries built with cc -m32 on the amd64 system. 
  	 A backtrace for the example in the next section yields:
	
	Core was generated by `pthread-crash'.
	Program terminated with signal 11, Segmentation fault.
	Reading symbols from /usr/lib32/libpthread.so.2...(no debugging symbols found)...done.
	Loaded symbols for /usr/lib32/libpthread.so.2
	Reading symbols from /usr/lib32/libc.so.6...(no debugging symbols found)...done.
	Loaded symbols for /usr/lib32/libc.so.6
	Reading symbols from /libexec/ld-elf.so.1...(no debugging symbols found)...done.
	Loaded symbols for /libexec/ld-elf.so.1
	#0  0x0804d100 in ?? ()
	[New Thread 0x805301408053200 (runnable)]
	[New Thread 0x2809f1c808053000 (runnable)]
	Cannot get thread info: generic error
	(gdb) bt
	#0  0x0804d100 in ?? ()
	
	This has been reproduced on two machines with completely different hardware. 	


>How-To-Repeat:
   The problem can be reproduced by the following code (pthread_crash.c):
        #include <stdio.h>
        #include <pthread.h>

        void *thread(void *data) {
          puts("Thread.");
          return NULL;
        }
 
        int main() {
          pthread_t pth;
          void *pv;
          pthread_create(&pth,NULL,thread,NULL);
          pthread_join(pth,&pv);
          return 0;
        }
        The code is compiled with:
        cc -m32 -B/usr/lib32 -pthread -o pthread-crash pthread-crash.c
	This code runs fine when compiled to 64 bit.

>Fix:
None known.
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-amd64 mailing list