[gmx-users] pdb2gmx segmentation fault

Justin A. Lemkul jalemkul at vt.edu
Fri Apr 22 20:12:10 CEST 2011



Matthew Zwier wrote:
> Nice catch on the readdir_r().  I wonder if the developers would
> appreciate a bug report and patch for your fix.
> 

Yes, please file an issue report on redmine.gromacs.org.  If it doesn't get put 
on a to-do list, it probably won't get done :)

-Justin

> On Fri, Apr 22, 2011 at 1:05 PM, Ragothaman Yennamalli
> <ragothaman at gmail.com> wrote:
>> Hi all,
>> With the help of my colleague Nathan Weeks I am able to run pdb2gmx and all
>> other commands successfully . Here are his responses which he wanted me to
>> share with you in case someone is trying to install Gromacs in a similar
>> system.
>>
>> We set CFLAGS that way due to the following message when running configure:
>>
>> ########################################
>> checking whether gcc-4.3.2 accepts -native -fast -xO5 -fsimple=2
>> -fnonstd -dalign -O3 -fomit-frame-pointer -finline-functions -Wall
>> -Wno-unused -msse2 -funroll-
>> all-loops -std=gnu99... no
>> *******************************************************************
>> * Sorry, these optimization settings don't seem to work for       *
>> * your C compiler. Use make CFLAGS=..., or edit the top Makefile. *
>> *******************************************************************
>> ########################################
>>
>> The "-native -fast -xO5 -fsimple=2 -fnonstd -dalign" options that get
>> generated are for Solaris Studio, but we're using GCC.  Also,
>> "-D_POSIX_PTHREAD_SEMANTICS" is required on Solaris to make use of the POSIX
>> versions of reentrant functions like ctime_r() and readdir_r() (if the
>> standard _POSIX_C_SOURCE or _XOPEN_SOURCE feature test macros
>> are set, _POSIX_PTHREAD_SEMANTICS will automatically be set as well).
>>
>> The memory fault that occurs when running pdb2gmx is due to a non-portable
>> use
>> of readdir_r() in futil.c; specifically, on Linux, the dirent structure
>> has a "char d_name[256]" member, and on Solaris, it is "char d_name[1]", and
>> the user is required to allocate memory to store its contents. The Linux
>> readdir(3) man page gives an example of how to do this portably:
>>
>> http://www.kernel.org/doc/man-pages/online/pages/man3/readdir.3.html
>>
>> I applied this method to futil.c, and it fixed the memory fault problem:
>>
>> ########################################
>> --- src/gmxlib/futil.c.orig     2011-03-15 07:44:30.000000000 -0500
>> +++ src/gmxlib/futil.c  2011-04-20 13:04:58.388912208 -0500
>> @@ -37,6 +37,7 @@
>>  #include <config.h>
>>  #endif
>>
>> +#include <stddef.h>
>>  #include <stdio.h>
>>  #include <stdlib.h>
>>  #include <string.h>
>> @@ -595,22 +596,28 @@
>>
>>  #ifdef HAVE_DIRENT_H
>>
>> -    struct dirent           tmp_dirent;
>> +    struct dirent *         tmp_dirent;
>>     struct dirent *         p;
>> +    size_t len;
>>
>>
>>     if(gmxdir!=NULL && gmxdir->dirent_handle!=NULL)
>>     {
>> -        rc = readdir_r(gmxdir->dirent_handle,&tmp_dirent,&p);
>> +        len  = offsetof(struct dirent, d_name)
>> +               + fpathconf(dirfd(gmxdir->dirent_handle), _PC_NAME_MAX) + 1;
>> +        smalloc(tmp_dirent, len);
>> +        rc = readdir_r(gmxdir->dirent_handle,tmp_dirent,&p);
>> +
>>         if(p!=NULL && rc==0)
>>         {
>> -            strncpy(name,tmp_dirent.d_name,maxlength_name);
>> +            strncpy(name,tmp_dirent->d_name,maxlength_name);
>>         }
>>         else
>>         {
>>             name[0] = '\0';
>>             rc      = ENOENT;
>>         }
>> +        sfree(tmp_dirent);
>>     }
>>     else
>>     {
>> ########################################
>>
>>> Also why the make -j 48, when you only have 8 cores?
>> We have 8 6-core CPUs (48 cores total).
>>
>>> I'm not even sure if the linker is ok with make -jN for building gromacs,
>>> it
>>> is not listed as compatible for *BSD ports. Also, does your make (I
>>> imagine
>>> this is Solaris make) have all the same semantics as gnu-make (gmake)?
>> We are using GNU make.
>>
>>> And why did you switch your CC between fftw and gromacs configures?
>>> Solaris 'cc' may or may not be gcc43. Also, do we know if gcc43 is stable
>>> especially with -O3...Try removing -O3 or move it to -O2 at most...
>> The Sun Studio 12.1 C compiler worked for fftw, but not for gromacs.
>>
>>> To rule out a bad fftw library, you can set --with-fft to use the builtin
>>> (slower) libfft instead of fftw (but fftw should not be affecting pdb2gmx
>>> I don't think...).
>>>
>>> I too have the questions of your CFLAGS, do you not require -m64 either?
>> With gcc 4.3, there was a compilation error when -m64 was added to CFLAGS:
>>
>> ###################################################
>> make[5]: Entering directory
>> `/tmp//gromacs-4.5.4/src/gmxlib/nonbonded/nb_kernel_ia32_sse'
>> /bin/sh ../../../../libtool   --mode=compile gcc-4.3.2   -m64 -g
>> -msse2 -std=gnu99 -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -pthread
>> -I./include -c -o nb_kernel010_ia32_sse.lo nb_kernel010_ia32_sse.s
>>  gcc-4.3.2 -m64 -g -msse2 -std=gnu99 -D_POSIX_PTHREAD_SEMANTICS
>> -D_REENTRANT -pthread -I./include -c nb_kernel010_ia32_sse.s  -fPIC
>> -DPIC -o .libs/nb_kernel010_ia32_sse.o
>> nb_kernel010_ia32_sse.s: Assembler messages:
>> nb_kernel010_ia32_sse.s:87: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:89: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:90: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:91: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:92: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:93: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:94: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:795: Error: suffix or operands invalid for `pop'
>> nb_kernel010_ia32_sse.s:796: Error: suffix or operands invalid for `pop'
>> nb_kernel010_ia32_sse.s:797: Error: suffix or operands invalid for `pop'
>> nb_kernel010_ia32_sse.s:798: Error: suffix or operands invalid for `pop'
>> nb_kernel010_ia32_sse.s:799: Error: suffix or operands invalid for `pop'
>> nb_kernel010_ia32_sse.s:800: Error: suffix or operands invalid for `pop'
>> nb_kernel010_ia32_sse.s:865: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:867: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:868: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:869: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:870: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:871: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:872: Error: suffix or operands invalid for `push'
>> nb_kernel010_ia32_sse.s:1344: Error: suffix or operands invalid for `pop'
>> nb_kernel010_ia32_sse.s:1345: Error: suffix or operands invalid for `pop'
>> nb_kernel010_ia32_sse.s:1346: Error: suffix or operands invalid for `pop'
>> nb_kernel010_ia32_sse.s:1347: Error: suffix or operands invalid for `pop'
>> nb_kernel010_ia32_sse.s:1348: Error: suffix or operands invalid for `pop'
>> nb_kernel010_ia32_sse.s:1349: Error: suffix or operands invalid for `pop'
>> make[5]: *** [nb_kernel010_ia32_sse.lo] Error 1
>> ##############################################
>>
>>
>> --
>> ****************************************
>> Ragothaman M Yennamalli, Ph.D.
>> Postdoctoral Research Associate
>> 1012 Crop Genome Informatics Laboratory
>> Department of Genetics, Development and Cell Biology
>> Iowa State University
>> Ames, Iowa 50011-3260 USA
>>
>> +1 515-294-8971 (Office)
>> +1 515-294-8280 (Fax)
>> +1 515-851-1016 (Mobile)
>>
>> "When you can do the common things of life in an uncommon way, you will
>> command the attention of the world." -George Washington Carver
>>
>> http://www.public.iastate.edu/~raghu/
>> http://www.artistrkrishnarao.com/
>>
>> ***************************************
>>
>>
>> --
>> gmx-users mailing list    gmx-users at gromacs.org
>> http://lists.gromacs.org/mailman/listinfo/gmx-users
>> Please search the archive at
>> http://www.gromacs.org/Support/Mailing_Lists/Search before posting!
>> Please don't post (un)subscribe requests to the list. Use the
>> www interface or send it to gmx-users-request at gromacs.org.
>> Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
>>

-- 
========================================

Justin A. Lemkul
Ph.D. Candidate
ICTAS Doctoral Scholar
MILES-IGERT Trainee
Department of Biochemistry
Virginia Tech
Blacksburg, VA
jalemkul[at]vt.edu | (540) 231-9080
http://www.bevanlab.biochem.vt.edu/Pages/Personal/justin

========================================



More information about the gromacs.org_gmx-users mailing list