The issue describe below on July 1 is still present on master as of last night's tarball.
-Paul On Wed, Jul 1, 2015 at 8:51 AM, Paul Hargrove <phhargr...@lbl.gov> wrote: > Back in February I reported ( > http://www.open-mpi.org/community/lists/devel/2015/02/17073.php) that > when building master on Linux with the Solaris Studio compilers and -m32 I > saw the following: > > /bin/sh ../../../libtool --tag=CC --mode=link cc -m32 -g -mt > -export-dynamic -o opal_wrapper opal_wrapper.o ../../../opal/ > libopen-pal.la -lrt -lm -lutil -lrt -lm -lutil > libtool: link: cc -m32 -g -mt -o .libs/opal_wrapper opal_wrapper.o > -Wl,--export-dynamic ../../../opal/.libs/libopen-pal.so -ldl -lrt -lm > -lutil -mt -Wl,-rpath > -Wl,/scratch/phargrov/OMPI/openmpi-master-linux-x86_64-ss12u4-m32/INST/lib > ../../../opal/.libs/libopen-pal.so: undefined reference to `ebx' > > Where obviously 'ebx' should be a register, not a symbol. > > Nobody got back to me on that, but I figured it out this morning. > The 2-line patch below fixed this issue for me. > > It looks like the gcc asm syntax for multiple assembler dialects (search > for "dialects" in https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html) > is not supported by the Studio compilers. > Since there doesn't appear to be any real effort to support Intel asm > syntax (vs the ATT syntax used by gas) elsewhere in Open MPI, it is kind of > pointless to do it just in this one header. > So, I believe that the "{l}" on the changed lines can/should also be > changed to bare "l". > > > On a related note: > As of gcc-5.1 (released in April), ebx is now scheduled as an other > register and not reserved to be the GOT pointer. > So, the > xchgl %%ebx, %1 > could (I think) now become > xchgl %%ebx,%%ebx > which is not going to have the desired effect of preserving %ebx across > the cpuid instruction. > However the problem only occurs if "b" is a member of the "r" class, which > I have not verified. > *IF* the problem can occur, then one fix would be to change "=r" to > something like "=SD". > > -Paul > > > --- opal/include/opal/sys/ia32/timer.h.orig 2015-07-01 > 08:12:59.357980816 -0700 > +++ opal/include/opal/sys/ia32/timer.h 2015-07-01 07:59:36.452918286 -0700 > @@ -35,9 +35,9 @@ > int tmp; > > __asm__ __volatile__( > - "xchg{l} {%%}ebx, %1\n" > + "xchg{l} %%ebx, %1\n" > "cpuid\n" > - "xchg{l} {%%}ebx, %1\n" > + "xchg{l} %%ebx, %1\n" > "rdtsc\n" > : "=A"(ret), "=r"(tmp) > :: "ecx"); > > > -- > Paul H. Hargrove phhargr...@lbl.gov > Computer Languages & Systems Software (CLaSS) Group > Computer Science Department Tel: +1-510-495-2352 > Lawrence Berkeley National Laboratory Fax: +1-510-486-6900 > -- Paul H. Hargrove phhargr...@lbl.gov Computer Languages & Systems Software (CLaSS) Group Computer Science Department Tel: +1-510-495-2352 Lawrence Berkeley National Laboratory Fax: +1-510-486-6900