target/10395: sse2 datatype is not 16bytes aligned in threaded code

Tim Prince timothyprince@sbcglobal.net
Sun Apr 13 23:36:00 GMT 2003


The following reply was made to PR target/10395; it has been noted by GNATS.

From: Tim Prince <timothyprince@sbcglobal.net>
To: vgrebinski@yahoo.com, gcc-gnats@gcc.gnu.org
Cc: vgrebinski@yahoo.com
Subject: Re: target/10395: sse2 datatype is not 16bytes aligned in threaded code
Date: Sun, 13 Apr 2003 16:31:16 -0700

 On Sunday 13 April 2003 15:44, vgrebinski@yahoo.com wrote:
 > >Number:         10395
 > >Category:       target
 > >Synopsis:       sse2 types are incorrectly aligned causing crash in
 > > multi-threaded apps Confidential:   no
 > >Severity:       serious
 > >Priority:       medium
 > >Responsible:    unassigned
 > >State:          open
 > >Class:          wrong-code
 > >Submitter-Id:   net
 > >Arrival-Date:   Sun Apr 13 22:46:00 UTC 2003
 > >Closed-Date:
 > >Last-Modified:
 > >Originator:     Vladimir Grebinskiy
 > >Release:        3.3 20030410 (prerelease)
 > >Organization:
 > >Environment:
 >
 > System: Linux vag 2.4.21-pre5 #2 Sun Mar 2 00:28:31 EST 2003 i686 unknown
 > unknown GNU/Linux Architecture: i686
 >
 >
 > host: i386-pc-linux-gnu
 > build: i386-pc-linux-gnu
 > target: i386-pc-linux-gnu
 > configured with:
 > /build/packages/gcc/snap/gcc-snapshot-20030410/src/configure -v
 > --enable-languages=c,c++,java,f77,pascal,objc,ada
 > --prefix=/usr/lib/gcc-snapshot --infodir=/share/info --mandir=/share/man
 > --enable-shared --with-system-zlib --enable-nls --without-included-gettext
 > --enable-__cxa_atexit --enable-clocale=gnu --enable-java-gc=boehm
 > --enable-java-awt=xlib --with-cpp-install-dir=bin --enable-multilibs
 > --enable-objc-gc i386-linux
 >
 > >Description:
 >
 > support for sse2 instruction is an important addtion to gcc-3.3.
 > Unfortunately, code generated for functions called via pthread_create()
 > does not provide 16bytes alignment for local sse2 data, which causes crash
 > when these variables are used.
 >
 > >How-To-Repeat:
 >
 > The following short program demonstrates problem. The second call to
 > function "f" shows that variable is not aligned to 16 bytes:
 >
 > /* *** start ***/
 > #include <pthread.h>
 > #include <stdio.h>
 > #include <assert.h>
 >
 > #include <xmmintrin.h>
 > #include <mmintrin.h>
 >
 > #ifdef __ICC
 > #include <emmintrin.h>
 > #endif
 >
 > void * f(void *p)
 > {
 >   int x = (p == NULL) ? 0 : * (int *) p;
 >   __m128i s;
 >   printf("&x = %p &s= %p\n", &x, &s);
 >   return NULL;
 > }
 >
 > int main(int argc, char ** argv)
 > {
 >   pthread_t th;
 >
 >   f(& argc);
 >   assert(pthread_create(& th, NULL, f, &argc)==0);
 >   assert(pthread_join(th, NULL)==0);
 >   return 0;
 > }
 >
 > /* ***end *** /
 >
 > $ /usr/lib/gcc-snapshot/bin/gcc -pthread -msse2 gcc_test.c -o
 > gcc_test.LINUX $ ./gcc_test.LINUX
 > &x = 0xbffffb6c &s= 0xbffffb50
 > &x = 0xbf7ffae8 &s= 0xbf7ffacc <---- error
 >
 > >Fix:
 >
 > 
 Similar problem here, but I had to change --m128i to --m128.  Did you try 
 rebuilding libpthread with the proper options passed to gcc?  Otherwise, it 
 looks like an error in the library build.  gcc won't work unless libpthread 
 passes aligned stack to your function.  I tried another compiler, which 
 doesn't expect aligned stack, and it was OK.
 -- 
 Tim Prince



More information about the Gcc-prs mailing list