Hi,

I am writing in reference to my previous e-mails:
1. http://opendx.npaci.edu/mail/opendx-dev/2003.08/msg00000.html
2. http://opendx.npaci.edu/mail/opendx-dev/2003.07/msg00079.html

I am very glad to let you know that the problem is finally resolved!

The problem is in the way OpenDX loads its modules on AIX.  In the
file "src/exec/dpexec/loader.c" it is done by calling the function
"load", which does not initialize "static" C++ objects of out module.
Then our module (exactly it was HDF5 library) wanted to operate on
uninitialized objects, thus causing a segmentation fault.

To cure the problem, IBM provides "dl" functions as a new way of
handling modules (since AIX v. 4.2), and some replacement functions
for "load" and "unload": "loadAndInit" and "terminateAndUnload".

The file "loader.c" has two commented lines of code with functions
"loadAndInit" and "terminateAndUnload", and my first try was to
uncomment these lines (and to comment the lines with "load" and
"unload").  But then I had to link dxexec with the C++ library by
"-lC", because "loadAndInit" and "terminateAndUnload" are there.  Once
I added this option, dxexec would crash.  I don't know why.

Then I simply pruned all the code for "ibm6000" in loader.c and made
the compiler use "dl" functions, which are supported on AIX since
version 4.2.  With this OpenDX and our modudule work correctly.

I think it's a good idea to patch loader.c so that "dl" functions are
used.  It's better to aim for newer versions of AIX, then for older
ones.



Best,
Irek


Reply via email to