On 2/10/2012 9:27 AM, Paul H. Hargrove wrote:

I have versions 8.1.032, 9.0.024 and 9.1.042 of the Intel compilers on a Linux/x86 (32-bit) host. All three can configure and build hwloc-1.3.2rc1, but all are failing "make check" in the same way.
What I see is ton(ne)s of linker messages and every executable SEGVs.

The linker messages look like:
  CC     hwloc_synthetic.o
  CCLD   hwloc_synthetic
ld: hwloc_synthetic.o(.text+0x1c): unresolvable relocation against symbol `hwloc_topology_init' ld: hwloc_synthetic.o(.text+0x2a): unresolvable relocation against symbol `hwloc_topology_set_synthetic' ld: hwloc_synthetic.o(.text+0x33): unresolvable relocation against symbol `hwloc_topology_load' ld: hwloc_synthetic.o(.text+0x3c): unresolvable relocation against symbol `hwloc_topology_check' ld: hwloc_synthetic.o(.text+0x46): unresolvable relocation against symbol `hwloc_topology_get_depth' ld: hwloc_synthetic.o(.text+0x64): unresolvable relocation against symbol `hwloc_get_nbobjs_by_depth' ld: hwloc_synthetic.o(.text+0x8a): unresolvable relocation against symbol `hwloc_get_obj_by_depth' ld: hwloc_synthetic.o(.text+0xc6): unresolvable relocation against symbol `hwloc_topology_destroy'
Where most tests have far more of these.

For the moment, I am going to assume the SEGVs are a result of the linker problems.

As compared to gcc on the same system, the only difference in include/private/autogen/config.h is:
 /* Whether C compiler supports symbol visibility or not */
-#define HWLOC_C_HAVE_VISIBILITY 1
+#define HWLOC_C_HAVE_VISIBILITY 0
Where the '1' is the build with the Intel compiler.
So, my current suspicion falls on the visibility crud.
I can confirm that "HWLOC_CFLAGS = -fvisibility=hidden" in Makefile.
Other then that, I don't know where to begin looking at this problem.

-Paul


For comparison, tried building the OMPI 1.4.5rc5 with these Intel compilers.
icc-9.1.042: caused assertion failure in ld - let not consider this one
icc-9.0.024: PASSed "make all install check clean"
icc-8.1.032: PASSed "make all install check clean"

So, I believe that the two PASS results shows that the correct visibility logic is "known" in ompi. The key difference appears to be that ompi has decided NOT to use -fvisibility with these compilers:
============================================================================
== Symbol Visibility Feature
============================================================================
checking if icc supports -fvisibility... no
checking enable symbol visibility... no
And from the ompi-1.4.5rc5 config.log:
configure:164594: checking if icc supports -fvisibility
configure:164624: icc -o conftest -O3 -DNDEBUG -finline-functions -fno-strict-aliasing -restrict -pthread -fvisibility=hidden conftest.c -lnsl -lutil >&5
/tmp/iccFBKDBg.o: In function `bar':
conftest.c:(.text+0x26): undefined reference to `fputs'
ld: conftest: hidden symbol `fputs' isn't defined
ld: final link failed: Nonrepresentable section on output
configure:164631: $? = 1

As compared to hwloc-1.3.2rc1:
configure:8253: checking if icc supports -fvisibility
configure:8268: icc -o conftest -fvisibility=hidden -Werror conftest.c >&5
configure:8268: $? = 0
configure:8279: result: yes

So, my educated guess is that one needs to (back)port the configure logic for visibility support.

-Paul

--
Paul H. Hargrove                          phhargr...@lbl.gov
Future Technologies Group
HPC Research Department                   Tel: +1-510-495-2352
Lawrence Berkeley National Laboratory     Fax: +1-510-486-6900

Reply via email to