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
<[email protected]> 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    [email protected]
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 [email protected].
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

========================================
--
gmx-users mailing list    [email protected]
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 [email protected].
Can't post? Read http://www.gromacs.org/Support/Mailing_Lists

Reply via email to